Vérifier les processus par utilisateur

Cali -  
mamiemando Messages postés 33772 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

En bash je souhaite vérifier qu'un utilisateur a bien lancé un processus et si ce n'est pas le cas, je veux le démarrer pour lui.

Pour le moment, j'y arrive en lancant ce script par le crontab de l'utilisateur :
#!/bin/sh
#/usr/local/bin/check_processus
PROC_NOM=processus-daemon
PROC_COMMANDE='/usr/local/bin/processus-daemon'
ps auwx | grep -v grep | grep $PROC_NOM > /dev/null || $PROC_COMMANDE


Mais ce n'est pas pratique à maintenir puisque qu'il faut le mettre dans chaque crontab. Je voudrais que le système fasse ce contrôle pour tous les utilisateurs. Pour le moment je me perds un peu dans les boucles et je me demande s'il n'existe pas une recette pour ça ?

Merci pour vos idées

A voir également:

1 réponse

mamiemando Messages postés 33772 Date d'inscription   Statut Modérateur Dernière intervention   7 882
 
Supposons que le programme à lancer soit tvtime par l'utilisateur mando. Alors cette commande (que tu peux mettre dans ta crontab) (sur une ligne) :

$(ps -eocommand,user | grep mando | cut -d" " -f1 | grep -q tvtime) || tvtime


... va lancer tvtime si et seulement si ce programme n'est pas déjà lancé.

Petites précisions :
- $(...) évalue le résultat de la commande "..."
- || est un OU logique. Si la première opérande est vraie, alors selon le principe du "OU paresseux", la seconde ne sera pas évaluée (ce qui signifie que la commande tvtime ne sera pas lancée).
- Pour comprendre ce qui est dans $(...) lance successivement :

ps -eocommand,user 
ps -eocommand,user | grep mando 
ps -eocommand,user | grep mando | cut -d" " -f1


... et si tu veux plus de précisions :

man ps 
man grep 
man cut


- Enfin, le "grep -q" permet de renvoyer "vrai" ou "faux" en si le motif (ici tvtime) a été trouvé ou non dans le flux passé à grep (ici les processus lancés par mando).

Bonne chance
0