Come riavviare un eseguibile se muore


8

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?


ci sono altre risposte e indicazioni in questa domanda serverfault.com/questions/56526/…
jrg

Risposte:


7

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.


Allo stesso modo, launchd è piuttosto carino.
Jeremy L

Sì. Gli strumenti Daemon sono piuttosto interessanti anche per questo tipo di cose, ma falliscono il test "integrato", senza motivo.
Cian,

10

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.


Bello. Funziona anche con ksh e cambierei "echo" in un comando "logger" per inserire il messaggio nei registri di sistema.
Mei,

Risposta perfetta fratello, tienilo su.
Arunjith RS,

4

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.


+1, assicurati di coprire anche le situazioni in cui viene ucciso anche intenzionalmente .
Maximus Minimus,

Buon punto, anche se nel mio caso il processo scompare
pesce palla il

3

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

2

Perché non un semplice script bash?

#!/usr/bin/bash
while `true`
do
  xeyes
done

Sostituisci xeyes con un programma a tua scelta.


0

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 daemontoolsper gestirlo.


Risposta breve: ti sbagli di grosso. Risposta lunga: se una distro Linux non ha inittab, avrà /etc/event.d/ - entrambi i meccanismi riavvieranno un processo quando muore.
Paul Tomblin,
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.