Solución 1:
Buscaría daemontools (http://cr.yp.to/daemontools.html).
Supervise se creó exactamente con este propósito:iniciar procesos y observarlos, reiniciándolos inmediatamente si alguna vez terminan.
Todavía podría usar monit si necesita hacer algo más complicado que una simple verificación de "¿todavía se está ejecutando?", y si el proceso necesita reiniciarse, hágalo a través de supervisar.
Solución 2:
También puede usar /etc/inittab para reiniciar procesos muertos usando respawn acción.
Consulte la sección inittab en http://aplawrence.com/Unixart/startup.html
Solución 3:
Puede usar secuencias de comandos del controlador de eventos con Nagios si tiene eso en su lugar para reiniciar los servicios.
Si Varnish requiere permiso de root para iniciarse (los scripts init.d generalmente lo requieren), cambie "/etc/init.d/varnish start" a "sudo /etc/init.d/varnish start". Pero eso probablemente no sea suficiente, ya que probablemente no desee otorgar a cualquier usuario monit que se ejecute como privilegios totales de sudo nopasswd para todos los comandos y otorgar sudo a un script de shell sería básicamente igual de malo. Por lo tanto, deberá averiguar qué comandos en ese script de inicio necesitan sudo, otorgar privilegios de sudo a esos comandos en el archivo /etc/sudoers al usuario monit y, finalmente, editar ese script de inicio en consecuencia. ¿O tal vez en lugar de todo este barniz se puede ejecutar como usuario no root?
Finalmente, estoy seguro de que sabes esto, pero lo voy a decir de todos modos. Estás poniendo mucho esfuerzo en esto, espero que estés poniendo tanto esfuerzo en descubrir por qué Varnish se bloquea y en realidad lo está arreglando (o acosando a los desarrolladores para averiguar por qué) :-)
Actualizar:
Es posible que esto no sea tan limpio, pero una manera fácil de hacerlo como root podría ser configurar un script que verifique si el proceso está bien y, si no, lo inicia. Luego simplemente ejecute ese script cada dos minutos como un trabajo cron.
Solución 4:
Otro gran método tomado de StackOverflow:
until myserver; do
echo "Server 'myserver' crashed with exit code $?. Respawning.." >&2
sleep 1
done
Esto podría agregarse al crontab:
crontab -e
Luego agregue una regla para iniciar su secuencia de comandos de monitoreo:
@reboot /usr/local/bin/myservermonitor
O agregado como script en /etc/init.d
Consulte la respuesta de StackOverflow para obtener una explicación detallada de por qué este es un buen enfoque.