
Tengo un archivo binario que deja de ejecutarse cada pocas semanas, simplemente puedes iniciarlo nuevamente y se ejecutará durante algunas semanas más. El software no es perfecto pero sería bastante perfecto si se reiniciara automáticamente.
¿Cuál es la mejor manera de configurar algo para verificar automáticamente si el binario se está ejecutando e iniciarlo si no es así?
Respuesta1
Una forma elegante de controlar su programa es creando un script con mecánica de archivo PID, que guardará el PID del programa en un archivo y verificará con él si el proceso aún se está ejecutando:
#!/bin/bash
PID_FILE=/var/run/rerun.pid # need root permission to store in this directory
EXEC=/usr/bin/gedit # replace it with actual executable
function run() {
# execute the program
$EXEC &
# save its PID
echo $! > $PID_FILE
}
if [ -e $PID_FILE ]; then
# check if program is still running
pid=$(<$PID_FILE)
# find the proper process
ps --pid $pid|grep -q `basename $EXEC`
if [ $? != 0 ]; then
# not found - rerun
run
fi
else
# no PID file - just execute
run
fi
Ahora ejecute el script periódicamente (por ejemplo, encrontab).