Estoy buscando una manera de monitorear un proceso y relanzar el ejecutable si el proceso muere por cualquier razón. ¿Linux tiene una herramienta integrada que puede hacer esto?
Si se inicia desde init, puede reiniciarlo mediante init. Establezca la acción para que el proceso 'reaparezca' para los niveles de ejecución en los que desea el proceso.
#!/bin/bash
while ! <<command>>
do
sleep 1
echo "Restarting program..."
done
Reemplace <<command>>con el comando que desea ejecutar. El proceso tiene que terminar con el código de salida cero para romper el ciclo. De lo contrario, el script lo reinicia.
Agradable. Esto también funciona con ksh, y cambiaría el "echo" a un comando "logger" para poner el mensaje en los registros del sistema.
Mei
Respuesta perfecta hermano, sigue así.
Arunjith RS
4
¿Solo quieres reiniciarlo si muere? El problema con esto es que no maneja situaciones donde se congela. Por lo tanto, solo verificar el proceso no siempre ayudará. Entonces, si esto es algo así como un servidor web, desea tener un script que lo verifique desde la perspectiva del usuario.
Si configura Nagios Monitoring, puede usar controladores de eventos . Estos son solo scripts que escribes que se ejecutarán cuando el servicio se caiga, por lo que podrías tener uno que reinicie algo como Apache si el sitio web está caído.
+1, asegúrate de que también cubras situaciones donde también se mata intencionalmente .
Maximus Minimus
Buen punto, aunque en mi caso el proceso simplemente desaparece
pez globo
3
Dependiendo de la distribución, pero hemos utilizado con éxito "monit" para esta tarea. Es muy facil. Puede escribir sus propios cheques, monitorear el PID del proceso, etc.
Archivo monitrc de ejemplo:
check process sshd with pidfile /var/run/sshd.pid
start program "/etc/init.d/ssh start"
stop program "/etc/init.d/ssh stop"
if failed port 22 protocol ssh then restart
if 5 restarts within 5 cycles then timeout
Respuesta corta: estás completamente equivocado. Respuesta larga: si una distribución de Linux no tiene inittab, tendrá /etc/event.d/; cualquiera de los mecanismos reiniciará un proceso cuando muera.
Respuestas:
Si se inicia desde init, puede reiniciarlo mediante init. Establezca la acción para que el proceso 'reaparezca' para los niveles de ejecución en los que desea el proceso.
fuente
He respondido una pregunta similar antes .
En tu caso:
Reemplace
<<command>>
con el comando que desea ejecutar. El proceso tiene que terminar con el código de salida cero para romper el ciclo. De lo contrario, el script lo reinicia.fuente
¿Solo quieres reiniciarlo si muere? El problema con esto es que no maneja situaciones donde se congela. Por lo tanto, solo verificar el proceso no siempre ayudará. Entonces, si esto es algo así como un servidor web, desea tener un script que lo verifique desde la perspectiva del usuario.
Si configura Nagios Monitoring, puede usar controladores de eventos . Estos son solo scripts que escribes que se ejecutarán cuando el servicio se caiga, por lo que podrías tener uno que reinicie algo como Apache si el sitio web está caído.
fuente
Dependiendo de la distribución, pero hemos utilizado con éxito "monit" para esta tarea. Es muy facil. Puede escribir sus propios cheques, monitorear el PID del proceso, etc.
Archivo monitrc de ejemplo:
fuente
¿Por qué no un simple script bash?
Reemplace xeyes con el programa de su elección.
fuente
Respuesta corta : No, tienes que hacerlo tú mismo.
Respuesta larga : Necesitará un proceso padre para iniciarlo, y luego seguir verificando que esté activo y reiniciarlo si es necesario.
Podrías usar algo como
daemontools
administrarlo.fuente