¿Cómo puedo reiniciar automáticamente un proceso después de que finalice?

11

Tengo un programa golang que quiero reiniciar después de que termina en un cuadro de Debian Squeeze. La cosa es servir HTTP detrás de una configuración mod_proxy de Apache 2. No espero que el proceso falle, pero me gustaría tener un seguro contra él.

En Ubuntu, habría utilizado el arranque para mantener vivo el proceso. Debian no le gusta Upstart por lo que entiendo, ya que es un reemplazo de inicio.

¿Existe una alternativa que reinicie uno o más procesos después de que finalicen que funcione en Squeeze y que funcione bien con init?

Eliminado
fuente
¿Podrías reformular tu pregunta? ¿Es que desea reiniciar un proceso después de que se haya terminado?
mailq
Me gustaría reiniciar un proceso automáticamente si falla o termina por sí mismo.
Borrado el
2
El programa init tradicional hace precisamente esto. Por qué la gente pensó que sería una buena idea usar init para ejecutar un script de shell que invoca un script de shell que inicia otro proceso que hace lo mismo, pero sin un pánico y reinicio automático del kernel en caso de que ese proceso falle, está completamente fuera de mi alcance.
Simon Richter
Ese es un punto justo. Investigaré solo usando init también. Estoy empaquetando el software usando dpkg, por lo que crear scripts de inicio no debería ser una dificultad.
Borrado el

Respuestas:

10

La mejor manera de hacerlo son los daemontools. Le permiten monitorear y reaparecer procesos.

Consulte la documentación en su sitio web: http://cr.yp.to/daemontools.html

mailq
fuente
1
Gracias, eso es lo que busco. DJB = bueno como regla. ¡Realmente debería haber recordado que existía con pasar 5 años cuidando qmail!
Borrado el
Lo mismo conmigo, excepto que solía cuidar djbdns durante bastante tiempo.
Sr.b
10

supervisar es una alternativa ligera y eficiente. Bajo debian está empaquetado en daemontools . También puede leer esta pregunta relacionada , que enumera algunas críticas de supervisión y menciona reiniciar como otra posibilidad.

Finalmente, si quieres algo increíblemente fácil de configurar, he tenido un gran éxito con monit . También está empaquetado en Debian .

Francois G
fuente
2
daemontools es asombroso; monit es una maldita pesadilla de "¿por qué demonios no comenzarás?" frustración.
womble
2

supervisar o monitorear son buenos para mantener vivo un solo proceso. Como usted solicita mantener vivos "uno o más" procesos, me gustaría conectar a la supervisión . Sin duda, es excesivo manejar un solo proceso, pero si necesita realizar un seguimiento de varios procesos, puede ser lo suyo.

Bittrance
fuente
2

Una opción es usar en /etc/inittablugar de poner su script /etc/init.d/.

Simplemente agregue una entrada en el siguiente formato:

<jobname>:<runlevels>:respawn:<command>

Desafortunadamente, esto significa que no puede usar los comandos de inicio normales de inicio / detención / reinicio, pero debe garantizar que su script se ejecute todo el tiempo.

Alex
fuente
2

La forma de distribución cruzada de reiniciar el proceso de manejo es con cron y un script simple. Puede ver una reseña aquí Cómo mantener un trabajo en ejecución en Linux

El guión se parece a algo

#!/bin/bash 
# make-run.sh 
# make sure a process is always running.  
# Add the following to the crontab (i.e. crontab -e)
# */5 * * * * /home/path_to_make_run/make-run.sh

process=servermonitoringhq 
makerun="/home/path_to_the_job_you_want_running/runjob.sh"  

if pgrep $process > /dev/null         
then                 
  exit         
else         
  $makerun &         
fi 
Ian Purton
fuente