Cómo relanzar un ejecutable si muere

8

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?

pez globo
fuente
hay algunas respuestas e indicadores más en esta pregunta serverfault.com/questions/56526/…
jrg

Respuestas:

7

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.

Cian
fuente
Del mismo modo, launchd es bastante agradable.
Jeremy L
Sí. Las herramientas Daemon también son geniales para este tipo de cosas, pero no pasan la prueba 'incorporada', sin querer.
Cian el
10

He respondido una pregunta similar antes .

En tu caso:

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

Juliano
fuente
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.

Kyle Brandt
fuente
+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
Ramon Poca
fuente
2

¿Por qué no un simple script bash?

#!/usr/bin/bash
while `true`
do
  xeyes
done

Reemplace xeyes con el programa de su elección.

djhowell
fuente
0

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 daemontoolsadministrarlo.

Rory
fuente
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.
Paul Tomblin