Surveiller un process dans Debian

Je veux créer un service qui surveille l'existence d'un certain process. J'ai écrit le script shell suivant:

#!/bin/sh while : do w=`ps u -A | grep -P ".+Sl.+/usr/local/MySource/endpoint" -c` sleep 10 if [ $w -lt 2 ] then echo 0 > /sys/class/leds/alix\:2/brightness killall -9 /usr/local/MySource/endpoint nohup /usr/local/MySource/endpoint &> /dev/null & last_endpoint_m=`date` echo $last_endpoint_m > /tmp/endpoint_msleep echo $w >> /tmp/endpoint_msleep else echo 1 > /sys/class/leds/alix\:2/brightness fi sleep 10 done 

Si le process existe, le script éteindra une LED sur ma machine et commencera le process. La LED devrait être ON pendant que le process est en cours.

Je lance ensuite ce script en ajoutant la ligne suivante à /etc/rc.local :

 nohup /usr/local/MyTools/additions/XR50_endpoint_m &> /dev/null & 

Quand je cours ps , je trouve que le XR50_endpoint_m & process est là.

Ma machine est une carte ALIX avec des ressources limitées (embeddedes) exécutant Debian.

La question est:
La variable $w est toujours nulle (j'ai vérifié ceci à partir du file de sortie /tmp/endpoint_msleep ). Bien que le process existe et que le script fonctionne correctement si je l'exécute manuellement ( $w=2 )!

Quelle est selon vous la raison et quelle est la meilleure façon de suivre un process?

Il échoue parce que vous exécutez ps u . De l' man ps :

u Afficher le format orienté user.

Cela signifie que ps ne ps que les process appartenant à l'user actuel. Lorsque vous exécutez le script manuellement, cet user est-il ainsi votre process est répertorié correctement.

(Comme @Gilles l'a souligné très justement, l'utilisation de -A entraînera l'printing de tous les process, donc l'explication est tout simplement fausse.


Quoi qu'il en soit, une meilleure façon de le faire serait d'utiliser pgrep :

  pgrep, pkill - look up or signal processes based on name and other atsortingbutes 

Changement

 w=`ps u -A | grep -P ".+Sl.+/usr/local/MySource/endpoint" -c` 

à

 w=`pgrep -c endpoint`