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