Come posso riavviare automaticamente un processo al termine?


11

Ho un programma Golang che voglio riavviare dopo che termina in una casella di compressione Debian. La cosa sta servendo HTTP dietro un'installazione mod_proxy di Apache 2. Non mi aspetto che il processo fallisca, ma mi piacerebbe avere un'assicurazione contro di esso.

Su Ubuntu avrei usato upstart per mantenere vivo il processo. A Debian non piace Upstart da quello che ho capito in quanto è un sostituto di init.

Esiste un'alternativa che riavvia uno o più processi dopo la loro conclusione che funziona su Squeeze e funziona bene con init?


Per favore, riformuli la tua domanda? Vuoi riavviare un processo dopo che è stato terminato?
mailq,

Vorrei riavviare automaticamente un processo se si guasta o si interrompe da solo.
Eliminato il

2
Il tradizionale programma init fa esattamente questo. Perché la gente pensasse che sarebbe una buona idea usare init per eseguire uno script di shell invocando uno script di shell che avvia un altro processo che fa la stessa cosa, ma senza un panico automatico del kernel e il riavvio nel caso in cui tale processo dovesse mai fallire, è completamente al di là di me.
Simon Richter,

Questo è un punto giusto. Investigherò anche usando init. Sto impacchettando il software usando dpkg, quindi la creazione di script di init non dovrebbe essere una difficoltà.
Eliminato il

Risposte:


10

Il modo migliore per farlo è il daemontools. Ti consentono di monitorare e rigenerare i processi.

Vedere la documentazione sul loro sito Web: http://cr.yp.to/daemontools.html


1
Grazie - è proprio quello che sto cercando. DJB = buono come regola. Avrei davvero dovuto ricordare che esisteva quello che trascorrevo 5 anni a occuparmi di qmail!
Eliminato il

Lo stesso con me, tranne per il fatto che mi occupavo di djbdns da parecchio tempo.
signor

10

supervisionare è un'alternativa leggera ed efficiente. Sotto Debian è confezionato in demonoli . Puoi anche leggere questa domanda correlata , che elenca alcune critiche di supervisione e menziona il riavvio come un'altra possibilità.

Infine, se vuoi qualcosa di incredibilmente facile da configurare, ho avuto un grande successo con Monit . È anche impacchettato in Debian .


2
daemontools è fantastico; il monit è un incubo da brividi di "perché diavolo non inizi?!?" frustrazione.
womble

2

supervisione o monitoraggio sono utili per mantenere in vita un singolo processo. Dato che chiedi di mantenere "uno o più" processi in vita, vorrei collegare Supervord . È sicuramente eccessivo per la gestione di un singolo processo, ma se hai bisogno di tenere traccia di più processi potrebbe essere la tua passione.


2

Un'opzione è usare /etc/inittabinvece di inserire il tuo script /etc/init.d/.

È sufficiente aggiungere una voce nel seguente formato:

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

Sfortunatamente questo significa che non è possibile utilizzare i normali comandi init start / stop / restart, ma dovrebbe assicurarsi che lo script sia sempre in esecuzione.


2

Il modo di distribuzione incrociata di gestire i riavvii del processo è con cron e un semplice script. Puoi vedere un writeup qui Come mantenere un lavoro in esecuzione su Linux

La sceneggiatura è simile

#!/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 
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.