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?

Kugelfisch
quelle
Es gibt einige weitere Antworten und Hinweise
jrg

Antworten:

7

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".

Cian
quelle
Ebenso ist launchd ziemlich nett.
Jeremy L
Ja. Daemon-Tools sind auch für diese Art von Dingen ziemlich cool, bestehen den eingebauten Test jedoch nicht.
Cian
10

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.

Juliano
quelle
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.

Kyle Brandt
quelle
+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
Ramon Poca
quelle
2

Warum nicht ein einfaches Bash-Skript?

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

Ersetzen Sie xeyes durch ein Programm Ihrer Wahl.

djhowell
quelle
0

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.

Rory
quelle
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.
Paul Tomblin