So starten Sie eine ausführbare Datei neu, wenn sie stirbt
8
Ich suche nach einer Möglichkeit, einen Prozess zu überwachen und die ausführbare Datei neu zu starten, wenn der Prozess aus irgendeinem Grund stirbt. Hat Linux ein eingebautes Tool, das dies kann?
Wenn es von init aus gestartet wird, können Sie es von init erneut starten lassen. Setzen Sie die Aktion für den Prozess für die Ausführungsebenen, auf denen der Prozess ausgeführt werden soll, auf "Respawn".
#!/bin/bash
while ! <<command>>
do
sleep 1
echo "Restarting program..."
done
Ersetzen Sie <<command>>durch den Befehl, den Sie ausführen möchten. Der Prozess muss mit dem Exit-Code Null abgeschlossen werden, um die Schleife zu unterbrechen. Andernfalls wird es vom Skript neu gestartet.
Nett. Dies funktioniert auch mit ksh, und ich würde das "Echo" in einen "Logger" -Befehl ändern, um die Nachricht in die Systemprotokolle einzufügen.
Mei
Perfekte Antwort bro.keep it up.
Arunjith RS
4
Möchten Sie es nur neu starten, wenn es stirbt? Das Problem dabei ist, dass es keine Situationen behandelt, in denen es einfriert. Es hilft also nicht immer, nur nach dem Prozess zu suchen. Wenn dies also so etwas wie ein Webserver ist, möchten Sie, dass ein Skript es aus der Sicht des Benutzers überprüft.
Wenn Sie Nagios Monitoring einrichten, können Sie Ereignishandler verwenden . Dies sind nur Skripte, die Sie schreiben und die ausgeführt werden, wenn der Dienst heruntergefahren wird. Sie können also eines haben, das so etwas wie Apache neu startet, wenn die Website nicht verfügbar ist.
+1, Stellen Sie sicher, dass Sie auch Situationen abdecken, in denen es auch absichtlich getötet wird.
Maximus Minimus
Guter Punkt, obwohl in meinem Fall der Prozess einfach verschwindet
Kugelfisch
3
Abhängig von der Distribution, aber wir haben "monit" erfolgreich für diese Aufgabe verwendet. Es ist ziemlich einfach. Sie können Ihre eigenen Schecks ausstellen, die PID des Prozesses überwachen usw.
Beispiel monitrc Datei:
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
Lange Antwort : Sie benötigen einen übergeordneten Prozess, um ihn zu starten. Überprüfen Sie dann, ob er aktiv ist, und starten Sie ihn bei Bedarf neu.
Sie könnten so etwas verwenden daemontools, um es zu verwalten.
Kurze Antwort: Du liegst absolut falsch. Lange Antwort: Wenn eine Linux-Distribution kein inittab hat, hat sie /etc/event.d/ - jeder Mechanismus startet einen Prozess neu, wenn er stirbt.
Antworten:
Wenn es von init aus gestartet wird, können Sie es von init erneut starten lassen. Setzen Sie die Aktion für den Prozess für die Ausführungsebenen, auf denen der Prozess ausgeführt werden soll, auf "Respawn".
quelle
Ich habe zuvor eine ähnliche Frage beantwortet .
In Ihrem Fall:
Ersetzen Sie
<<command>>
durch den Befehl, den Sie ausführen möchten. Der Prozess muss mit dem Exit-Code Null abgeschlossen werden, um die Schleife zu unterbrechen. Andernfalls wird es vom Skript neu gestartet.quelle
Möchten Sie es nur neu starten, wenn es stirbt? Das Problem dabei ist, dass es keine Situationen behandelt, in denen es einfriert. Es hilft also nicht immer, nur nach dem Prozess zu suchen. Wenn dies also so etwas wie ein Webserver ist, möchten Sie, dass ein Skript es aus der Sicht des Benutzers überprüft.
Wenn Sie Nagios Monitoring einrichten, können Sie Ereignishandler verwenden . Dies sind nur Skripte, die Sie schreiben und die ausgeführt werden, wenn der Dienst heruntergefahren wird. Sie können also eines haben, das so etwas wie Apache neu startet, wenn die Website nicht verfügbar ist.
quelle
Abhängig von der Distribution, aber wir haben "monit" erfolgreich für diese Aufgabe verwendet. Es ist ziemlich einfach. Sie können Ihre eigenen Schecks ausstellen, die PID des Prozesses überwachen usw.
Beispiel monitrc Datei:
quelle
Warum nicht ein einfaches Bash-Skript?
Ersetzen Sie xeyes durch ein Programm Ihrer Wahl.
quelle
Kurze Antwort : Nein, Sie müssen es selbst tun.
Lange Antwort : Sie benötigen einen übergeordneten Prozess, um ihn zu starten. Überprüfen Sie dann, ob er aktiv ist, und starten Sie ihn bei Bedarf neu.
Sie könnten so etwas verwenden
daemontools
, um es zu verwalten.quelle