Diese Antwort gilt für Ubuntu-Versionen mit Upstart (<= 14.10). Verwenden Sie einen anderen Ansatz für Versionen mit Systemd (> = 15.04).
Offenbar suchen Sie nach einer Funktionalität, die bereits in Ubuntu mit Upstart bereitgestellt wird . Die respawn
Zeilengruppe in der Konfiguration wird genau das tun, was Sie benötigen. Ich würde davon abraten, eine weniger übliche Vorgehensweise zu wählen.
Ohne weitere Details zu dem Prozess, den Sie damit verwalten möchten, ist es schwierig zu sagen, wie die Konfiguration aussehen soll. Es kommt darauf an, ob es sich gabelt und sich zum Beispiel in den Hintergrund stellt. In der Upstart-Dokumentation zur respawn
Zeilengruppe finden Sie weitere Informationen.
Leider ist es noch nicht möglich , Benutzer - Jobs richtig auszuführen: kann Emporkömmling Benutzer Job nicht bekommen laufen
Beispiel
Nehmen wir an, wir möchten die Calculator-App auch dann am Laufen halten, wenn sie durch Feuer getötet wird (Signal 9).
Erstellen Sie eine Konfigurationsdatei in /etc/init/calculator.conf
(basierend auf diesem Artikel ):
#!upstart
description "Calculator"
# Start job via the daemon control script. Replace "gert" with your username.
exec su -l gert -c 'export DISPLAY=:0; /usr/bin/gnome-calculator'
# Restart the process if it dies with a signal
# or exit code not given by the 'normal exit' stanza.
respawn
# Give up if restart occurs 10 times in 90 seconds.
respawn limit 10 90
Starten Sie es durch Ausführen
sudo start calculator
Es öffnet sich auf Ihrem aktuellen Display ( :0
) und Sie können die Großartigkeit genießen, indem Sie sehen, wie es nach dem Schließen neu gestartet wird.
Identifizieren Sie die Prozess-ID, z. B . ps aux | grep calculator
:
gert 13695 0.2 0.4 349744 16460 ? Sl 13:38 0:00 /usr/bin/gnome-calculator
Töte es mit Feuer.
sudo kill -9 13695
Schau es dir nochmal an:
gert 16059 4.6 0.4 349736 16448 ? Sl 13:40 0:00 /usr/bin/gnome-calculator
Beachten Sie, dass dies mit den Plänen für die Ubuntu 13.04-Pläne mit ordnungsgemäßer Unterstützung für Benutzerjobs eleganter wird.
servicename.conf
muss mit dem zu startenden Befehl übereinstimmenstart servicename
. Ich vermute, Sie haben einen anderen Namen gewählt.Ein extrem einfaches Tool, das den gleichen Effekt erzielen kann, ohne dass eine Konfiguration erforderlich ist
immortal
: https://immortal.run/Führen Sie einfach den folgenden Befehl aus:
immortal <cmd>
Es wird im Hintergrund ausgeführt und automatisch neu gestartet, wenn es beendet wird.
immortalctl
: Status der ausgeführten Jobs anzeigen. Es gibt einename
Spalte, die hier gedruckt wird. Sie können diese verwenden, um auf den Job mit anderen Steuerbefehlen zu verweisen.immortalctl stop <name>
: Stoppt die Überwachung des Jobs mit dem angegebenen Namen (es wird nicht automatisch neu gestartet, aber der aktuelle Prozess wird weiterhin ausgeführt)immortalctl -k <name>
: Sendet SIGKILL an den aktuellen Prozess.immortalctl exit <name>
: Stoppt die Überwachung des Jobs mit dem angegebenen Namen und entfernt ihn aus der Jobliste.quelle
stdout
undstderr
im Vordergrund?immortalctl -l out.log <cmd> && tail -f out.log
, um den gleichen Effekt zu erzielen.Wenn Sie keine Daemon- / Service- / Hintergrundprozessfunktionalität benötigen und diese nur in der Konsole ausführen möchten, erstellen Sie eine Datei mit dem Namen
autorestart.sh
:Dann
./autorestart.sh
wird automatisch neu gestartet ,some_command
wenn er oder Abstürze beendet. STRG-C unterbricht die Schleife und beendet das Programm sauber.Getestet unter Ubuntu 18.04.
quelle
Es gibt einen Weg ohne "Upstart". Das Schlüsselwort lautet "inittab" :-). Obwohl dies eine Datei ist, die normalerweise nicht vom Standard geändert wird, kann sie verwendet werden, um auf SYSV-Computern das gewünschte erneute Wiederherstellen zu erreichen.
quelle
ps-watcher ist ein Tool, das überwacht, welche Prozesse ausgeführt werden und eine Aktion unter definierten Umständen ausführt. Lass es uns installieren:
Weitere Informationen finden Sie unter Ausführen von HHVM mit Rückgriff auf PHP-FPM. Dies hat bei mir gut funktioniert.
quelle
Start- und Respawning-Prozesse werden seit Ubuntu 15.04 von "systemd" verwaltet, eine gute Einführung finden Sie hier
https://www.digitalocean.com/community/tutorials/systemd-essentials-working-with-services-units-and-the-journal
Ein Beispiel für den Einstieg finden Sie unter
https://www.devdungeon.com/content/creating-systemd-service-files
Dieser Ansatz ersetzt ältere, auf / etc / inittab und upstart basierende.
quelle