Vérifiez si le programme est en cours d'exécution avec le shell bash script?

Ceci est un exemple d'un script bash qui vérifie pour certains processus en cours d'exécution (daemon ou service) et ne des actions spécifiques (reload, envoie de mail) si il n'y a pas de tels processus en cours d'exécution.

check_process(){
        # check the args
        if [ "$1" = "" ];
        then
                return 0
        fi

        #PROCESS_NUM => get the process number regarding the given thread name
        PROCESS_NUM='ps -ef | grep "$1" | grep -v "grep" | wc -l'
        # for degbuging...
        $PROCESS_NUM
        if [ $PROCESS_NUM -eq 1 ];
        then
                return 1
        else
                return 0
        fi
}

# Check whether the instance of thread exists:
while [ 1 ] ; do
        echo 'begin checking...'
        check_process "python test_demo.py" # the thread name
        CHECK_RET = $?
        if [ $CHECK_RET -eq 0 ]; # none exist
        then
                # do something...
        fi
        sleep 60
done

Toutefois, il ne fonctionne pas. J'ai eu "ERREUR: Ordures option." pour le ps de commande. Quel est le problème avec ces scripts? Merci!

Je vous recommandons d'utiliser pgrep -f "$1" au lieu de ps | grep | grep combo.
Le morceau de code: "si [ $PROCESS_NUM -eq 1]; then return 1; else return 0; fi" n'est pas très idiomatique. C'est beaucoup plus propre de tout simplement la fin de la fonction avec "test $PROCESS_NUM -ne 1". La valeur de retour de la dernière commande sera retournée par la fonction.
en fonction de vos besoins, il peut y avoir de meilleurs outils pour le travail. En particulier, si vous avez besoin de s'assurer qu'un processus est en cours, découvrez les supervise programme de daemontools
Voir aussi askubuntu.com/a/157900/13975 et surtout l'explication liée de celui-ci: mywiki.wooledge.org/......

OriginalL'auteur Charlie Epps | 2011-10-10