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

Wie kann ich einen systemd-Dienst so konfigurieren, dass er regelmäßig neu gestartet wird?

Ich sah hier eine Lösung, die elegant, wenn auch etwas umständlich erschien. Die Schlüsselidee besteht darin, einen One-Shot-Dienst zu erstellen, der von einem Timer ausgelöst wird, der einen anderen neu startet Service.

Für den Timer:

[Unit]
Description=Do something daily

[Timer]
OnCalendar=daily
Persistent=true

[Install]
WantedBy=timers.target

Für den One-Shot-Service:

[Unit]
Description=Restart service

[Service]
Type=oneshot
ExecStart=/usr/bin/systemctl try-restart my_program.service

Für den One-Shot-Dienst auf Ubuntu 16.04 LTS:

[Unit]
Description=Restart service

[Service]
Type=oneshot
ExecStart=/bin/systemctl try-restart my_program.service

Mit dieser Lösung können Sie die Timer von systemd nutzen, einschließlich der Möglichkeit, den Dienst zu einer bestimmten Tageszeit und nicht nur nach Ablauf einer bestimmten Zeit neu zu starten.


Für systemd-Version>=229 gibt es eine Option namens RuntimeMaxSec , wodurch der Dienst beendet wird, nachdem er für den angegebenen Zeitraum ausgeführt wurde.

z.B. Alle 7 Tage neu starten:

[Service]
Restart=always
RuntimeMaxSec=7d

Das erscheint mir eleganter, als Type=notify zu missbrauchen und WatchdogSec .

systemd bietet eine saubere Möglichkeit, Anweisungen in systemd-Unit-Dateien hinzuzufügen und zu überschreiben, die von Anbietern bereitgestellt werden. Drop-In Units werden in man systemd.unit beschrieben. Wenn Sie beispielsweise den von einem Paket bereitgestellten foo-Dienst regelmäßig neu starten möchten, würden Sie eine Datei mit dem Namen /etc/systemd/system/foo.service.d/periodic-restart.conf erstellen . Der Inhalt wäre wie oben gezeigt. Dann:

 systemctl daemon-reload
 systemctl restart foo

Sie können bestätigen, dass die Drop-In-Einheit geladen wurde, da dies in der Statusausgabe gemeldet wird:

 systemctl status

Schließlich können Sie bestätigen, dass die Anweisung aufgenommen wurde, indem Sie nach systemctl show suchen Ausgabe:

 systemctl show foo.service | grep RuntimeMax

Die von systemctl show gemeldete Direktive wird "RuntimeMaxUSec`

sein
Linux
  1. Wie kann ich Dienste auf cPanel-Servern neu starten?

  2. So leiten Sie die Ausgabe des systemd-Dienstes in eine Datei um

  3. Wie stoppen Sie den systemd-Dienst

  4. So entfernen Sie systemd-Dienste

  5. Wie sende ich eine E-Mail, wenn ein systemd-Dienst neu gestartet wird?

So starten, stoppen oder starten Sie Nginx neu

Systemctl-Befehle zum Verwalten des Systemd-Dienstes

So starten, stoppen oder starten Sie Dienste in CentOS 8 neu

So starten Sie einen Dienst über systemctl unter Linux neu

So starten Sie Dienste in der Ubuntu-Befehlszeile neu

So verwenden Sie systemctl unter Linux