Wie Schreibe ich ein watchdog-daemon in der bash?

Ich möchte eine Art zu schreiben, der einen daemon in einer shell-Skript, das ausgeführt wird eine andere Anwendung in einer Schleife neu zu starten, wenn es stirbt.

  • Bei der Ausführung mit ./myscript.sh aus einer SSH-session, wird es starten Sie eine neue Instanz des Daemons, außer wenn der daemon bereits läuft.
  • Wenn die SSH-Sitzung beendet ist, wird der daemon soll bestehen bleiben.
  • Es wird ein parameter ( ./myscript -stop ), das tötet alle vorhandenen daemon.

(Hinweise auf Bearbeiten - Die ursprüngliche Frage angegeben, dass nohup und ähnliche Werkzeuge dürfen nicht verwendet werden. Diese künstliche Anforderung war eine "Frage XY", und die akzeptierten Antworten in der Tat nutzt alle Werkzeuge, die der OP behauptete, waren nicht möglich.)

Warum müssen Sie die pid? Das klingt ein wenig suspekt: um einen daemon-Prozess, müssen Sie die Doppel-Gabel-trick (Gabel/setsid/Gabel). Das bedeutet, dass der startende Prozess, obwohl es sein könnte, die pid von den Enkelkindern an Sie gesendet, kann nicht warten auf den Dämon. Es ist nicht wirklich viel Verwendung für die pid von einem Dämon (der Dämon selbst konnte ihn natürlich benutzen, um in /var/run zum Beispiel, und stellen Sie sicher, es ist die einzige Kopie von sich selbst laufen).
Wenn der PID, die wir uns in diesen trick nicht verwenden, könnten Sie mir bitte ein Beispiel von der version, die Sie sagte? Weil ich habe gesehen, dass der trick vor einer Weile und kann mich nicht erinnern viele details jetzt. Ich brauche PID-genau zu vermeiden, dup. proccess. Also der Haupt-proc erhalten args wie start, stop, etc, und die Gabel sollte eine überwachungsfunktion für ein anderes proc gibt. Ich habe kein problem mit watchdog und Argumente, aber stecken mit der richtigen Verzweigung
Sie müssen erklären, dass Sie ein bisschen mehr. Sie sagen, Sie wollen ein Dämon-Prozess, das heißt, eine, die völlig losgelöst von was auch immer Sie ins Leben gerufen. Sie wollen ein anderes script Steuern können, dass der Dämon. Ist es doppelte daemon-Prozesse, die Sie versuchen zu vermeiden? In diesem Fall, am Anfang des daemon-Skript, das Sie tun sollten if test -f /var/run/appname.pid; then exit; fi; echo $$ > /var/run/appname.pid; trap 'rm /var/run/appname.pid' EXIT. Dann starten Sie den daemon mit nohup. Für die Kommunikation mit dem daemon, müssen Sie verwenden einen anderen Mechanismus der IPC sowieso (bash unterstützt FIFOs).
also, was ist der Allgemeine Zweck dieses Skripts ist, dass es genannt werden können sagen, aus der ssh-session, wie ./my_script.sh dann wird es die Gabel selbst zum Dämon und als daemon wird es starten Sie eine andere Anwendung, führen Sie dann in Endlosschleife tun, die überprüfung jeder zweite, ob dieser Prozess ist lebendig, wenn nicht, starten Sie es neu. Wie ich bereits erwähnt habe, bin ich ziemlich viel Kenntnis von nohup, aber es nützt nichts, in meinem Fall, genauso wie auch keine cron verfügbar ist.
Ein wenig mehr, warum nicht verwenden nohup für den Aufruf dieses Skriptes: das Skript aufgerufen wird, von einem anderen ein und prüft, ob es bereits läuft, wenn nicht, dann geht es an daemon, wenn ja, beendet es verlassen daemon laufen und Berichte dieser situation, wenn top-level-Skript wurde aufgerufen mit dem parameter können sagen, zu stoppen-es wird in der Lage sein, dies zu stoppen watchdog.

InformationsquelleAutor Alexey Kamenskiy | 2012-08-19

Schreibe einen Kommentar