GNU/Linux >> Linux Esercitazione >  >> Linux

Un modo semplice per riavviare i processi bloccati?

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.


Linux
  1. [Linux]:7 cose che imparerai iniziando a scrivere un semplice script Shell

  2. Modo per fare in modo che uno script di shell venga sempre eseguito come root?

  3. Processi in una sessione in una shell interattiva vs in uno script?

  4. Impedire a Signt di raggiungere i processi figlio?

  5. Modo semplice per convertire HH:MM:SS (ore:minuti:secondi.frazioni di secondo) in secondi

Un modo semplice per elencare i collegamenti simbolici in Linux

Un modo semplice per aprire una porta in Ubuntu 21.10

Un modo semplice per controllare la versione dei driver NVIDIA su Linux

Un modo semplice per comprendere il comando IOStat

C'è un modo per mostrare la notifica dallo script bash in Ubuntu?

Qual è il modo più veloce per eseguire uno script?