2017-01-28 1 views
3

Ich brauche einen Systemd-Dienst, der kontinuierlich ausgeführt wird. System in Frage ist ein Embedded-Linux von Yocto gebaut. Wenn der Dienst aus irgendeinem Grund beendet wird (entweder fehlgeschlagen oder nur abgeschlossen), sollte er automatisch neu gestartet werden. Wenn das System mehr als X Mal neu gestartet wird, sollte das System neu gestartet werden.Systemd - immer einen Dienst ausführen und neu starten, wenn der Dienst mehr als X mal stoppt

Welche Möglichkeiten gibt es dafür? Ich kann an die folgenden zwei denken, aber beide scheinen suboptimal 1) mit einem Cron-Job, der buchstäblich die Überprüfung oben tun und die Anzahl der Wiederholungen irgendwo in/tmp oder anderen tmpfs behalten 2) den Dienst selbst verfolgen die Anzahl mal Es wurde gestartet (erneut in einigen tmpfs-Speicherort) und neu gestartet, falls erforderlich. Systemd müsste nur fortwährend versuchen, den Dienst zu starten, wenn er nicht läuft.

edit: wie von einer Antwort vorgeschlagen, habe ich den Dienst geändert, um die StartLimitAction wie unten angegeben zu verwenden. Es bewirkt, dass das Gerät korrekt neu zu starten, aber zu keinem Zeitpunkt macht es das System neu starten, auch wenn ich das Skript kontinuierlich töten:

[Unit] 
Description=myservice system 

[Service] 
Type=simple 
WorkingDirectory=/home/root 
ExecStart=/home/root/start_script.sh 

Restart=always 
StartLimitAction=reboot 
StartLimitIntervalSec=600 
StartLimitBurst=5 

[Install] 
WantedBy=multi-user.target 

Antwort

0

Dieses in Ihrer Service-Datei etwas sehr nah an Ihre Anforderungen tun soll:

Restart=always 
StartLimitAction=reboot 
StartLimitIntervalSec=60 
StartLimitBurst=5 

Es wird den Dienst neu starten, wenn es stoppt, außer es gibt mehr als 5 Neustarts in 60 Sekunden: In diesem Fall wird es neu starten.

Sie können sich auch den Wert WatchdogSec ansehen, aber diese Software-Watchdog-Funktionalität erfordert Unterstützung vom Dienst selbst (sehr einfach hinzuzufügen, siehe jedoch die Dokumentation zu WatchDogSec).

+1

Es scheint nicht zu funktionieren - Ich habe versucht, das Skript ein Dutzend Mal zu töten und es tatsächlich das Skript neu gestartet, aber es startet das System nie neu. Vermutlich vermisse ich etwas. Die Systemeinheit in der ursprünglichen Frage hinzugefügt – Igor

Verwandte Themen