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?
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?
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".
Ich habe zuvor eine ähnliche Frage beantwortet .
In Ihrem Fall:
#!/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.
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.
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
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.