62 votes

script bash pour vérifier le processus en cours

J'ai écrit un script bash pour vérifier si un processus est en cours d'exécution. Cela ne fonctionne pas car la commande ps retourne toujours le code de sortie 1. Lorsque j'exécute la commande ps depuis la ligne de commande, le $? est correctement défini, mais dans le script, il est toujours 1. Toute idée?

 #!/bin/bash
SERVICE=$1

ps -a | grep -v grep | grep $1 > /dev/null
result=$?
echo "exit code: ${result}"
if [ "${result}" -eq "0" ] ; then
    echo "`date`: $SERVICE service running, everything is fine"
else
    echo "`date`: $SERVICE is not running"
fi
 

Version Bash: GNU bash, version 3.2.25 (1) -release (x86_64-redhat-linux-gnu)

106voto

Andor Points 639

Il existe quelques méthodes très simples:

 pgrep procname && echo Running 
pgrep procname || echo Not running 
killall -q -0 procname && echo Running 
pidof procname && echo Running
 

16voto

Anders Points 3568

Essayé votre version sur BASH version 3.2.29, a bien fonctionné. Cependant, vous pouvez faire quelque chose comme ce qui est suggéré ci-dessus, un exemple ici:

 #!/bin/sh

SERVICE="$1"
RESULT=`ps -a | sed -n /${SERVICE}/p`

if [ "${RESULT:-null}" = null ]; then
    echo "not running"
else
    echo "running"
fi
 

10voto

user2128898 Points 51

J'utilise celui-ci pour vérifier toutes les 10 secondes le processus est en cours d'exécution et commence si ce n'est pas le cas et autorise plusieurs arguments:

 #!/bin/sh

PROCESS="$1"
PROCANDARGS=$*

while :
do
    RESULT=`pgrep ${PROCESS}`

    if [ "${RESULT:-null}" = null ]; then
            echo "${PROCESS} not running, starting "$PROCANDARGS
            $PROCANDARGS &
    else
            echo "running"
    fi
    sleep 10
done    
 

5voto

Dani Radulescu Points 31

Travailler un.

! / bin / bash
CHECK = 0 $
SERVICE = 1 $
DATE = `date`
SORTIE = $ (ps aux | grep -v grep | grep -v $ CHECK | grep $ 1)
echo $ OUTPUT
if ["$ {# OUTPUT}" -gt 0];
then echo "$ DATE: Le service $ SERVICE fonctionne, tout va bien"
else echo "$ DATE: $ SERVICE n'est pas en cours d'exécution"
Fi

4voto

Mike Veltman Points 31
#! / bin / bash
ps axho comm | grep $ 1> / dev / null
résultat = $?
echo "code de sortie: $ {result}"
if ["$ {result}" -eq "0"]; puis
echo "` date`: le service $ Service est actif, tout va bien "
autre
echo "` date`: $ SERVICE n'est pas en cours d'exécution "
/etc/init.d/$1 restart
Fi

Quelque chose comme ça

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X