40 votos

script de bash para comprobar el proceso de ejecución

Escribí un bash script para comprobar si un proceso se está ejecutando. No funciona desde el comando ps siempre devuelve el código de salida 1. Cuando ejecuto el comando ps desde la línea de comandos, el $? está establecida correctamente, pero dentro de la secuencia de comandos es siempre 1. Alguna idea?

#!/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

Bash versión: GNU bash, versión 3.2.25(1) liberación (x86_64-redhat-linux-gnu)

65voto

Andor Puntos 639

Hay algunos realmente sencillo métodos:

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

10voto

Anders Puntos 3568

Trató de que su versión de BASH versión 3.2.29, funcionaba bien. Sin embargo, se podría hacer algo como lo anterior sugiere, un ejemplo aquí:

#!/bin/sh

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

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

5voto

user2128898 Puntos 51

Yo uso este para comprobar cada 10 segundos se ejecuta el proceso y empezar, si no, y permite que múltiples argumentos:

#!/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    

4voto

Dani Radulescu Puntos 31

El trabajo de uno.

!/bin/bash
CHECK=$0
SERVICIO=$1
FECHA=`date`
SALIDA=$(ps aux | grep-v grep | grep-v $VERIFICACIÓN |grep $1)
echo $SALIDA
if [ "${#SALIDA}" -gt 0 ] ;
then echo "$FECHA: $SERVICIO de ejecución del servicio, todo está bien"
else echo "$FECHA: $SERVICIO no se está ejecutando"
fi

3voto

Mike Veltman Puntos 31
#!/bin/bash
ps axho comm| grep $1 > /dev/null
resultado=$?
echo "código de salida: ${resultado}"
if [ "${resultado}" -eq "0" ] ; then
echo "`fecha`: $SERVICIO de ejecución del servicio, todo está bien"
otra cosa
echo "`fecha`: $SERVICIO no se está ejecutando"
/etc/init.d/$1 reinicio
fi

Algo como esto

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X