Sto cercando un modo per monitorare un processo e riavviare l'eseguibile se il processo si interrompe per qualsiasi motivo. Linux ha uno strumento integrato che può farlo?
Sto cercando un modo per monitorare un processo e riavviare l'eseguibile se il processo si interrompe per qualsiasi motivo. Linux ha uno strumento integrato che può farlo?
Risposte:
Se viene lanciato da init, puoi farlo rigenerare da init. Impostare l'azione per il processo su "respawn" per i livelli di esecuzione a cui si desidera che il processo.
Ho già risposto a una domanda simile .
Nel tuo caso:
#!/bin/bash
while ! <<command>>
do
sleep 1
echo "Restarting program..."
done
Sostituisci <<command>>
con il comando che desideri eseguire. Il processo deve terminare con il codice di uscita zero per interrompere il ciclo. Altrimenti, viene riavviato dallo script.
Vuoi riavviarlo solo se muore? Il problema è che non gestisce le situazioni in cui si blocca. Quindi, per controllare solo il processo non sarà sempre utile. Quindi, se questo è qualcosa come un web server, vuoi che uno script lo controlli dal punto di vista dell'utente.
Se si imposta Nagios Monitoring, è quindi possibile utilizzare i gestori di eventi . Questi sono solo degli script che scrivi che verranno eseguiti quando il servizio non è attivo, quindi potresti averne uno che riavvia qualcosa come Apache se il sito web non è attivo.
A seconda della distro, ma abbiamo usato con successo "monit" per questo compito. È abbastanza facile Puoi scrivere i tuoi assegni, monitorare i processi PID, ecc.
Esempio di file monitrc:
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
Risposta breve : No, devi farlo da solo.
Risposta lunga : è necessario un processo padre per avviarlo, quindi continuare a controllare che sia attivo e riavviarlo se necessario.
Puoi usare qualcosa di simile daemontools
per gestirlo.