Como verificar si un proceso está corriendo mediante un SCRIPT

Imagen de deathUser

Tema: 

He visto varias veces preguntas de usuarios que dicen algo como:

Como subo o tal o cual servicio que se está cayendo cada x tiempo ???

Pues, para casos como estos, en los que se necesita verificar que un proceso se encuentre en ejecución y de no ser así, ejecutar algún comando, pues puede ser de utilidad un script como el siguiente:


#!/bin/bash
CUENTA=`ps auxw | grep proceso | grep -v grep`
FECHA=`date +'%Y-%m-%d %H:%M'`
if [ -z "${CUENTA}" ]; then
/script/o/comando/a/ejecutar > /dev/null 2>&1
mail -s "SUBJECT ${FECHA}" email@dominio.com << FIN
Cuerpo del mensaje ... ${FECHA}... etc ...
:D
FIN
fi

Donde:
- proceso: es el proceso que estamos monitoreando
- /script/o/comando/a/ejecutar: es el path del scrip o comado a ejecutar
en caso de que no se encuentre en ejecucion el proceso que estamos
monitoreando
- SUBJECT: el Asunto del e-mail de notificacion de nuestro procesos caido
- email@dominio.com: La dirección e-mail a la que deseamos se nos reporte
- Cuerpo del mensaje: Pues el contenido del mensaje, el mismo que puede
contener variables como la FECHA en el ejemplo

Claro está que el script por si solo no hace nada, para que funcione, habrá que programar su ejecución, por ejemplo con cron:


crontab -e
#Agregar una línea como:
0-59/10 * * * * /path/a/nuestro/script

Donde:
- 0-59/10: Especifica que el script se ejecute cada 10 minutos, se puede
cambiar el 10 por el intervalo que se considere adecuado, en caso de que
se desee que se ejecute cada minuto, bastará reemplazar "0-59/10" por un "*"
- /path/a/nuestro/script: es el path al scrip que acabamos de crear, no hay
que olvidarse de darle permisos de ejecución, claro está ...

Espero les sea de utilidad...
;)

Comentarios

PID

Imagen de pepo

Muy bueno pero por si las moscas en caso de que el proceso contenga la cadena grep o exista otro comando con nombre *proceso*, podrias mejor controlar el PID (y sera unico en la columna de PIDs)

------------------------------------------------
Linux User Registered #232544
Jabber : pepo@jabberes.org
Ekiga : pepo@ekiga.net
ICQ : 337889406
GnuPG-key : www.keyserver.net

------------------------------------------------
Linux User Registered #232544
Jabber : pepo@jabberes.org
Ekiga : pepo@ekiga.net
GnuPG-key : www.keyserver.net

Como arrancas un proceso con

Imagen de deathUser

Como arrancas un proceso con PID predefinido ???

En muchos casos los servicios hacen un log de su PID en un archiovo y podría usarse dicho PID para hacer el trabajito, pero si no lo tienes, no te queda otra que el ps y el grep, además se trata de un ejemplo que pretende ser una base para que lo adaptes a tus necesidades, puedes por ejemplo reemplazar el ps por un ping y chequear enlace y si no tienes enlace reiniciar la conexión ...

Gracias por tu aporte ...

bye
:)

Claro deathUser, el PID es

Imagen de pepo

Claro deathUser, el PID es secuencial y solo sabemos a ciencia cierta que init tendra el 1 de alli no sabemos, por eso podemos usar start-stop-daemon que nos daria un archivo con el PID (para no sacarlo a pata ;)) y de con eso revisarlo como nos sugieres.

Me parece que start-stop-daemon es un proceso que esta en la gran mayoria de distribuciones.

------------------------------------------------
Linux User Registered #232544
Jabber : pepo@jabberes.org
Ekiga : pepo@ekiga.net
ICQ : 337889406
GnuPG-key : www.keyserver.net

------------------------------------------------
Linux User Registered #232544
Jabber : pepo@jabberes.org
Ekiga : pepo@ekiga.net
GnuPG-key : www.keyserver.net

Buen punto Pepo:

Imagen de deathUser

Buen punto Pepo:

Se podría usar start-stop-daemon

Para iniciar el proceso y así chequear que exista el proceso con dicho PID en ejecución, así el scrip podría quedar algo como:

Considerando que el proceso se inicie con un comando como:

start-stop-daemon --start --background --pidfile /var/run/ejemplo.pid --make-pidfile --exec /usr/bin/ejemplo


#!/bin/bash
PID=`cat /var/run/ejemplo.pid`
CUENTA=`ps --pid ${PID} | grep -v PID`
FECHA=`date +'%Y-%m-%d %H:%M'`
if [ -z "${CUENTA}" ]; then
start-stop-daemon --start --background --pidfile /var/run/ejemplo.pid --make-pidfile --exec /usr/bin/ejemplo > /dev/null 2>&1
mail -s "SUBJECT ${FECHA}" email@dominio.com << FIN
Cuerpo del mensaje ... ${FECHA}... etc ...
:D
FIN
fi

Mejor ??? ;)

bye
:)