Bash Shell Script que lanza un proceso si no está corriendo

Publicado en: Tecnología

EN ocasiones, los procesos en segundo plano fallan y provocan un cierre de la ejecución. Para no tener que detectar el problema manualmente, chequeando que está corriendo, haciendo algo como:

$ ps auxw | grep nombreProceso

podemos hacer un pequeño script en shell para que compruebe que se está ejecutando, y si no… que lo lance por nosotros.

En el caso que ejemplifico de forma general, se trata de comprobar si 2 o más procesos PHP están corriendo (nombreProceso1, nombreProceso2), que corren en background, con la opción &. Si alguno de estos procesos no se está ejecutando, lo lanzamos.

#!/bin/bash##
# 1. Verifica si estan corriendo los procesos
# 2. Si falla alguno, los vuelve a lanzar
PROCESO1=`ps aux | grep -c nombreProceso1`
if [[ $PROCESO1 -eq 1 ]]
 then
  php -f /ruta/nombreProceso1.php &
fi
PROCESO2=`ps aux | grep -c nombreProceso2`
if [[ $PROCESO2 -eq 1 ]]
 then
  php -f /ruta/nombreProceso2.php &
fi
exit $1

Y para que sea algo desasistido del todo, lo metemos en el cron del sistema, y le decimos que se ejecute cada cierto tiempo, por ejemplo, cada media hora. Dependiedo de la versión de sistema, editamos el fichero crontab (de /etc/crontab) o lo añadimos directamente al cron del usuario que querramos que lo ejecute:

*/30 * * * * /ruta-script/controlProcesos.sh

Saludos