J'ai besoin de faire du travail de débogage et, dans le cadre de ce travail, j'ai besoin de savoir si des processus sont toujours en cours après la déconnexion d'une session utilisateur. Et je dois spécifiquement pouvoir aussi savoir à quel utilisateur appartiennent ces processus. Il me serait également utile de pouvoir consigner les processus toujours actifs pendant le processus d'arrêt le plus possible.
J'ai déjà essayé, par exemple, de consigner les processus qui sont toujours actifs après la déconnexion d'une session utilisateur donnée en ayant un compte administrateur actif en même temps qu'un autre compte. Ainsi, pendant que l'autre compte se déconnecte, le compte administrateur enregistre les processus activité avec:
top > ~/top.txt
Mais il y avait deux problèmes avec cela, premièrement, cela ne me permettait pas de dire quoi que ce soit à propos des processus actifs pendant le processus d'arrêt (ainsi que dans la mesure où je pouvais me connecter avant que le processus de journalisation soit terminé), et deuxièmement, la sortie dans le fichier texte était illisible pour moi parce que la plupart des lignes ressemblaient à ceci:
Et bien que je puisse distinguer ceci et en regardant un exemple réel de top
exécuté dans ma CLI, je peux dire ce que sont quelques bits, mais il est vraiment difficile de dire avec ce que je dois faire, en plus je ne Je ne sais pas à quel moment ce qui s’est passé, je ne sais pas si l’une des sorties du fichier est avant la fin de la session, après ou après un moment donné, et c’est vraiment très difficile à lire.
Je me demande donc s'il existe un moyen de mieux réaliser ce que j'essaie de réaliser? Et si quelqu'un pouvait me donner des suggestions sur la façon dont je pourrais le faire améliorer mes méthodes, ou suggérer de nouvelles méthodes.
Je pensais peut-être à exécuter automatiquement un script de journalisation en tant que root, mais en plus du risque de sécurité potentiel, cela me donnerait probablement le même résultat brouillé que celui obtenu de top
auparavant. S'il vous plaît laissez-moi savoir si vous avez besoin de plus d'informations.
Informations sur le système d'exploitation:
Description: Ubuntu 14.10
Release: 14.10
Vous êtes sur la bonne voie: j'aurais aussi un utilisateur qui regarde l'autre. Si top
ne vous donne pas le résultat souhaité, j'utiliserais ps aux
dans une boucle infinie avec un délai d'une seconde.
#!/bin/bash
# Example script for watching a logging off user
# This script is an answer to http://askubuntu.com/questions/608921/how-to-check-which-processes-are-still-active-after-a-user-session-has-logged-ou/608925#608925
# Copyright (c) 2015 Fabby
# This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. See the GNU General Public License for more details.
# You DID NOT receive a copy of the GNU General Public License along with this program as the license is bigger then this program.
while true
do
date >> /tmp/watch-logoff.txt
ps aux >> /tmp/watch-logoff.txt
sleep 1
done
Vous en arriverez à la conclusion que no, les processus appartenant à l'utilisateur déconnecté s'exécutent après leur fermeture de session complète.
Cette réponse de Rad vous donne un aperçu complet de la façon d’exécuter un script particulier lors de la déconnexion ou de la fermeture.
Ce que vous pouvez faire est de créer le script comme ceci
#!/bin/bash
ps -u username > /home/yourusername/outputfile.txt
Puis Sudo chmod +x scriptname
et ajouter une ligne
session-cleanup-script=/path/to/script
à /etc/lightdm/lightdm.conf
Quant à l'arrêt. . . Je crois que lors de l’arrêt, il exécute /etc/rc6.d/S20sendsigs
qui envoie des signaux de suppression à tous les travaux. Vous pouvez donc exécuter ce script avec le nom de fichier S10_scriptname pour le démarrer avant le script de sendigs (reportez-vous à la réponse de Radu pour plus d’informations).
Éditez: à partir du 14.04, lightdm.conf n’est pas créé par défaut, vous devrez peut-être créer ce fichier dans le répertoire /etc/lightdm/lightdm.conf.d/
, avec la première ligne disant [Seat Defaults]
Utilisez la liste suivante pour répertorier tous les processus d’un utilisateur particulier:
$ ps -fu "username"
Par exemple:
$ ps -fu foobar
Pour l'enregistrer dans un fichier:
$ ps -fu foobar > ~/ps_foobar
Voici une ligne qui peut être utilisée via cron
ou tout autre mécanisme de répétition:
[[ $(ps -u foobar | wc -l) -gt 1 ]] && echo "user foobar has process running" || echo "user foobar has no process running"
Pour vérifier les journaux lors de l’arrêt (autant que possible, enregistrez):
tail -f /var/log/syslog ## Run it prior to shutdown
Ou tout simplement lire le fichier /var/log/syslog
à tout moment, il contient les informations sur le temps complet et sera donc facile à comprendre.
Vous pouvez exécuter htop à partir de l'une des consoles tty afin de pouvoir déconnecter un utilisateur d'une session xsession tout en maintenant un terminal ouvert (htop est meilleur que top et plus facile à lire).
CTRL + ALT + F2 Vous pouvez vous connecter à une session de texte sous un nom d'utilisateur différent à partir de là, puis utilisez:
Sudo htop
pour le démarrer. Utilisation F6 puis faites défiler jusqu'à USER en utilisant le bouton fléché et appuyez sur Enter. Cela filtrera les résultats par utilisateur pour faciliter la lecture à ces fins.
Pour revenir à la xsession, appuyez sur CTRL + ALT + F7 et CTRL + ALT + F2 pour revenir à tty2 encore et ainsi de suite.
Vous pouvez utiliser le fichier ~./Bash_logout si les utilisateurs se déconnectent (remarque, bash Shell, par exemple ssh). Mais d'autres situations sont également décrites dans l'article/la réponse ci-dessous,
superutilisateur.com: créer une tâche de script pour Linux
@heemayl et d'autres décrivent déjà certaines des commandes que vous pouvez utiliser pour obtenir les processus en cours d'exécution lorsque les utilisateurs se déconnectent.
Si vous ne voulez que les PID actifs de l'utilisateur, vous pouvez aussi utiliser ci-dessous,
$ id -u username | xargs pgrep -U