GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie starte ich einen Linux-Hintergrundprozess automatisch neu, wenn er fehlschlägt?

Buildroot hat drei mögliche Init-Systeme, also gibt es drei Möglichkeiten, dies zu tun:

BusyBox init

Damit fügt man /etc/inittab einen Eintrag hinzu .

::respawn:/bin/myprocess

Beachten Sie, dass BusyBox init hat einen eigenwilligen /etc/inittab Format. Das zweite Feld ist bedeutungslos und das erste Feld ist keine ID sondern ein Geräte-Basisname.

Linux "System V" init

Auch hier fügt man einen Eintrag zu /etc/inittab hinzu .

myprocess:2345:respawn:/bin/myprocess

systemd

Man schreibt eine Unit-Datei beispielsweise in /etc/systemd/system/myprocess.service :

[Unit]
Description=My Process

[Service]
ExecStart=/bin/myprocess
Restart=always

[Install]
WantedBy=multi-user.target

Aktivieren Sie dies, um beim Booten automatisch zu starten mit:

systemctl enable myprocess.service

Starten Sie es manuell mit:

systemctl start myprocess.service

Weiterführende Literatur

  • "3.1.3 Init-System". Das Buildroot-Benutzerhandbuch .

Wie wäre es mit dem Erstellen einer Subshell mit einer Schleife, die ständig denselben Prozess aufruft?

Wenn es endet, geht die nächste Iteration der Schleife weiter und beginnt sie erneut.

(while true; do 
    /bin/myprocess
done) &

Wenn die Unterschale stirbt, ist es jedoch vorbei. Die einzige Möglichkeit in diesem Fall wäre, einen anderen Prozess (ich nenne ihn Nekromant) zu erstellen, der überprüft, ob Ihr Prozess aktiv ist, ihn zu starten, wenn dies nicht der Fall ist, und diesen Nekromanten mit cron auszuführen, damit Sie dies regelmäßig überprüfen können.

Der nächste Schritt wäre, sich zu fragen, was passieren könnte, wenn Cron stirbt, aber irgendwann sollten Sie sich sicher fühlen und aufhören, sich Sorgen zu machen.


Der einfachste Weg wäre, es zu /etc/inittab hinzuzufügen, das für solche Dinge entworfen wurde:

respawnen Wenn der Prozess nicht vorhanden ist, starten Sie den Prozess. Warten Sie nicht auf die Beendigung (scannen Sie die Datei /etc/inittab weiter). Starten Sie den Prozess neu, wenn er stirbt. Wenn der Prozess existiert, tun Sie nichts und scannen Sie die Datei /etc/inittab weiter.

Sie könnten beispielsweise Folgendes tun:

# Run my stuff
myprocess:2345:respawn:/bin/myprocess

Linux
  1. So starten Sie den Linux-Befehl im Hintergrund und trennen den Prozess im Terminal

  2. Wie erhalte ich den Pfad eines Prozesses in Unix / Linux

  3. Wie finde ich heraus, aus welchem ​​Ordner ein Prozess läuft?

  4. Wie stelle ich Swapiness pro Prozess für Linux ein?

  5. So richten Sie /etc/issues ein, um die IP-Adresse für eth0 anzuzeigen

So beenden Sie einen Prozess in Linux

So arbeiten Sie mit Vordergrund- und Hintergrundprozessen unter Linux

So senden Sie Prozesse unter Linux an den Hintergrund

Linux /etc/security/limits.conf Erklärung

Wie erstelle ich in meiner Datei /etc/hosts/ unter Linux/OSX eine Wildcard-Subdomain?

So starten Sie einen Dienst bei einem Fehler in Linux automatisch neu