Oft kommt es zu einem spontanen Ausfall des Dienstes. Der Benutzer muss sich dann um die manuelle Wiederherstellung kümmern. Das ist an sich kein Problem, wenn es auf einem Heimcomputer passiert. Mehr noch - es ist gut, denn es gibt eine echte Chance, den Zustand des Dienstes festzustellen, Fehler zu identifizieren und sie zu beseitigen. Ganz anders sieht es bei Servern und VPS-Diensten aus, die ständig arbeiten müssen, um den Zugriff auf eine Website oder eine Anwendung zu ermöglichen. In diesem Artikel werden wir uns ansehen, wie man den automatischen Neustart von Linux-Diensten auf verschiedene Arten konfigurieren kann: mit einem Überwachungsskript, das periodisch über cron ausgeführt wird, und in systemd.
Die Standardeinstellung ist, dass Systemd nichts mit dem Dienst macht, wenn er abstürzt. Der Benutzer kann die Einstellungen jedoch jederzeit so konfigurieren, dass der Dienst im Falle eines Absturzes oder Stopps automatisch neu gestartet wird. Zu diesem Zweck wird die Direktive Restart verwendet, die zum Abschnitt Service hinzugefügt werden sollte. Als Nächstes wollen wir uns ein Beispiel für die Konfiguration des automatischen Neustarts des Apache-Dienstes ansehen:
$ sudo systemctl edit apache2
[Service]
Restart=on-failure
RestartSec=5s
Hier gibt RestartSec an, wie lange gewartet werden soll, bevor der Dienst neu gestartet wird. Wenn Sie fertig sind, speichern Sie die Änderungen und führen Sie den Befehl daemon-reload aus, um die Konfiguration erneut zu lesen:
$ sudo systemctl daemon-reload
Um zu überprüfen, ob alles ordnungsgemäß funktioniert, sehen Sie sich den Status des Prozesses an und beenden Sie den Prozess mit einem Kill-Signal:
$ sudo systemctl status apache2
$ kill -KILL 32091
Überprüfen Sie den Status erneut, der Prozess sollte laufen. Um die Initialisierung so einzustellen, dass sie jedes Mal ausgeführt wird, verwenden Sie die spezielle Anweisung Restart: always. Seien Sie jedoch sehr vorsichtig, wenn Sie diese Direktive verwenden, denn sie erlaubt es Ihnen nicht, den Prozess zu beenden, selbst wenn dies notwendig ist. Wenn der Prozess ständig abstürzt, so dass er neu gestartet werden muss, können Sie im Abschnitt Service ein Limit für die Anzahl der Neustarts festlegen:
$ sudo systemctl edit apache2
[Service]
StartLimitIntervalSec=500
StartLimitBurst=5
Restart=on-failure
RestartSec=5s
Hier geben StartLimitBurst
und StartLimitIntervalSec
an, wie wichtig es ist, den Dienst fünfmal neu zu starten, und wenn er alle fünf Male abstürzt, ihn in Ruhe zu lassen und ihn nicht zu berühren. Die zweite Direktive begrenzt den Neustart des Dienstes auf 500 Sekunden.
Dies ist wahrscheinlich die zuverlässigste und ausfallsicherste Methode, die in allen Versionen von Linux funktioniert. Im Apache ist es einfach, einen automatischen Neustart mit Hilfe eines Skripts zu erstellen. Dazu müssen Sie den Befehl eingeben:
$ sudo vi /usr/local/bin/apache-monitor.sh
#!/bin/bash
ps -A | grep apache2 || systemctl start apache2
Speichern Sie die Datei und stellen Sie sicher, dass sie ausführbar ist:
chmod ugo+x /usr/local/bin/apache-monitor.sh
Vergessen Sie nicht, einen Cron-Eintrag hinzuzufügen, um das Skript regelmäßig auszuführen:
$ sudo crontab -e
*/5 * * * * /usr/local/bin/apache-monitor.sh
Das war's. Ja, das Einrichten eines automatischen Neustarts des Dienstes ist nicht so einfach, wie es auf den ersten Blick scheint. Aber es ist eine wichtige Fähigkeit, die Sie beachten sollten - es lohnt sich auf jeden Fall.