Website-Suche

So starten Sie einen fehlgeschlagenen Dienst unter Linux automatisch neu


In einem Linux-System spielen Dienste (auch Daemons genannt) eine entscheidende Rolle bei der Abwicklung verschiedener Aufgaben wie Webhosting, Datenbankverwaltung und Netzwerk. Dienste können jedoch manchmal aufgrund von Fehlern, hoher Ressourcenauslastung oder unerwarteten Systemfehlern abstürzen oder gestoppt werden.

Um Ausfallzeiten zu vermeiden und einen reibungslosen Betrieb zu gewährleisten, können Systemadministratoren Dienste so konfigurieren, dass sie bei einem Ausfall automatisch neu gestartet werden, was besonders nützlich für Webserver (Apache, Nginx), Datenbanken (MySQL, PostgreSQL) oder andere kritische Anwendungen ist, die jederzeit verfügbar sein müssen.

In dieser Anleitung erklären wir, wie Sie systemd verwenden, um einen Linux-Dienst so zu konfigurieren, dass er automatisch neu gestartet wird, wenn er gestoppt wird.

Warum einen Dienst automatisch neu starten?

Es gibt mehrere Gründe, warum Sie einen Dienst unter Linux automatisch neu starten möchten:

  • Minimieren Sie Ausfallzeiten: Wenn ein Dienst unerwartet beendet wird, sorgen automatische Neustarts dafür, dass die Benutzer nur minimale Unterbrechungen erleben.
  • Verbessern Sie die Zuverlässigkeit: Dienste wie Webserver, Datenbanken und Hintergrundprozesse sollten immer ausgeführt werden.
  • Reduzieren Sie die manuelle Arbeit: Ohne Automatisierung müssten Sie Dienste häufig überprüfen und manuell neu starten, wenn sie fehlschlagen.
  • Unerwartete Fehler behandeln: Wenn ein Dienst aufgrund von Softwarefehlern, Ressourcenbeschränkungen oder Systemfehlern abstürzt, kann systemd ihn ohne Administratoreingriff neu starten.

Lassen Sie uns nun die Schritte zum Einrichten automatischer Neustarts mit systemd durchgehen.

Schritt 1: Identifizieren Sie den Dienst, den Sie neu starten möchten

Bevor Sie Änderungen vornehmen, müssen Sie den genauen Namen des Diensts kennen, den Sie konfigurieren möchten, indem Sie alle ausgeführten Dienste auflisten.

systemctl list-units --type=service --state=running

Wenn Sie den Dienstnamen bereits kennen, können Sie seinen Status überprüfen.

systemctl status apache2

Ersetzen Sie apache2 durch den tatsächlichen Dienstnamen, den Sie verwalten möchten.

Schritt 2: Bearbeiten der Dienstkonfiguration

Systemd ermöglicht es Ihnen, das Dienstverhalten mithilfe von benutzerdefinierten Konfigurationsdateien zu ändern. Anstatt systemweite Einstellungen zu ändern (die während Updates überschrieben werden können), verwenden wir systemctl edit, um eine Überschreibungsdatei zu erstellen.

Führen Sie den folgenden Befehl aus:

systemctl edit apache2

Dadurch wird eine leere Datei in Ihrem Standard-Texteditor geöffnet.

Wenn die Datei nicht leer ist, werden vorhandene Einstellungen angezeigt, die Sie ändern können. Andernfalls müssen Sie die erforderliche Neustartkonfiguration hinzufügen.

Schritt 3: Fügen Sie die Systemd-Neustartkonfiguration hinzu

Fügen Sie im Editor die folgenden Zeilen hinzu.

[Service]
Restart=always
RestartSec=5s

Erläuterung dieser Einstellungen:

  • Restart=always – Stellt sicher, dass der Dienst neu gestartet wird, wenn er gestoppt wird, unabhängig vom Grund.
  • RestartSec=5s – Weist systemd an, 5 Sekunden zu warten, bevor der Dienst neu gestartet wird, was schnelle Neustartschleifen bei wiederholten Fehlern verhindern kann.

Speichern und schließen Sie die Datei nach dem Hinzufügen.

Nachdem Sie Änderungen an einem systemd-Dienst vorgenommen haben, müssen Sie systemd neu laden und den Dienst neu starten, um sicherzustellen, dass die neue Konfiguration angewendet wird:

sudo systemctl daemon-reload
sudo systemctl restart apache2

Um zu bestätigen, dass der Dienst jetzt so eingestellt ist, dass er automatisch neu gestartet wird, führen Sie Folgendes aus:

sudo systemctl show apache2 | grep Restart

Wenn alles korrekt konfiguriert ist, sollten Sie Folgendes sehen:

Restart=always

Schritt 4: Testen des automatischen Neustarts unter Linux

Um sicherzustellen, dass die Konfiguration funktioniert, können Sie den Dienst manuell stoppen und überprüfen, ob er neu gestartet wird.

sudo systemctl stop apache2

Warten Sie 5 Sekunden und überprüfen Sie dann den Status.

sudo systemctl status apache2

Wenn der Dienst wieder läuft, funktioniert der automatische Neustart!

Zusätzliche Neustartoptionen

Abhängig von Ihren Anforderungen bietet systemd unterschiedliche Neustartrichtlinien:

  • Restart=always – Der Dienst wird immer neu gestartet, auch wenn er manuell gestoppt wurde.
  • Restart=on-failure – Startet nur neu, wenn der Dienst mit einem Fehler beendet wird (aber nicht, wenn er manuell gestoppt wird).
  • Restart=on-abnormal – Startet den Dienst neu, wenn er aufgrund eines Signals (z. B. eines Segmentierungsfehlers) abstürzt.
  • Restart=on-watchdog – Startet den Dienst neu, wenn es während der Ausführung zu einer Zeitüberschreitung kommt.

Sie können Restart=always durch eine dieser Optionen ersetzen, je nach Ihren Anforderungen.

So überprüfen Sie Dienstprotokolle auf Probleme

Wenn ein Dienst weiterhin fehlschlägt, empfiehlt es sich, die Protokolle mit dem Befehl journalctl zu überprüfen, der die Protokolle der letzten 10 Minuten für den Dienst anzeigt.

journalctl -u apache2 --since "10 minutes ago"

Verwenden Sie für einen Echtzeit-Protokollstream Folgendes:

journalctl -u apache2 -f

Wenn Sie daran interessiert sind, den automatischen Neustart für andere init-Systeme einzurichten, lesen Sie diese Artikel:

  • So richten Sie den automatischen Neustart für fehlgeschlagene Dienste auf OpenRC ein
  • So starten Sie einen Dienst nach einem Fehler auf SysVinit und Upstart automatisch neu
Schlussfolgerung

Durch das Einrichten automatischer Neustarts für fehlerhafte Dienste wird sichergestellt, dass kritische Anwendungen ohne manuelle Eingriffe ausgeführt werden. Durch die Verwendung der Neustartoptionen von systemd können Sie Ausfallzeiten minimieren, die Systemstabilität verbessern und den Bedarf an manueller Fehlerbehebung reduzieren.

Verwandte Artikel: