Soluzione 1:
Cercherei daemontools (http://cr.yp.to/daemontools.html).
Supervise è stato creato esattamente per questo scopo:avviare i processi e controllarli, riavviandoli immediatamente se mai dovessero terminare.
Puoi comunque utilizzare monit se hai bisogno di fare qualcosa di più complicato di un semplice controllo "è ancora in esecuzione" e se il processo deve essere riavviato, fallo tramite supervision.
Soluzione 2:
Puoi anche usare /etc/inittab per riavviare i processi morti utilizzando il respawn azione.
Vedere la sezione inittab su http://aplawrence.com/Unixart/startup.html
Soluzione 3:
È possibile utilizzare gli script del gestore di eventi con Nagios se lo si dispone per riavviare i servizi.
Se la vernice richiede il permesso di root per l'avvio (gli script init.d di solito lo fanno) cambia "/etc/init.d/varnish start" in "sudo /etc/init.d/varnish start". Ma questo probabilmente non sarà abbastanza dato che probabilmente non vuoi dare a qualsiasi monit utente eseguito come privilegi sudo nopasswd totali a tutti i comandi e dare sudo a uno script di shell sarebbe fondamentalmente altrettanto negativo. Quindi dovrai capire quali comandi in quello script init richiedono sudo, dare a quei comandi i privilegi sudo nel file /etc/sudoers all'utente monit e infine modificare lo script init di conseguenza. O forse invece di tutta questa vernice può essere eseguito come utente non root?
Infine, sono sicuro che lo sai, ma lo dirò comunque. Stai chiaramente facendo molti sforzi in questo, spero che tu stia facendo altrettanto per capire perché la vernice si blocca e risolverlo effettivamente (o perseguitare gli sviluppatori per capire perché) :-)
Aggiornare:
Questo potrebbe non essere così pulito, ma un modo semplice per farlo come root potrebbe essere quello di impostare uno script che controlli se il processo è a posto e, in caso contrario, lo avvia. Quindi esegui lo script ogni paio di minuti come cron job.
Soluzione 4:
Un altro ottimo metodo tratto da StackOverflow:
until myserver; do
echo "Server 'myserver' crashed with exit code $?. Respawning.." >&2
sleep 1
done
Questo potrebbe essere aggiunto al crontab:
crontab -e
Quindi aggiungi una regola per avviare lo script del tuo monitor:
@reboot /usr/local/bin/myservermonitor
O aggiunto come script in /etc/init.d
Vedi la risposta di StackOverflow per una spiegazione dettagliata del motivo per cui questo è un buon approccio.