Automatischer Dienst-Neustart mit systemd konfigurieren
Automatischen Dienst-Neustart mit systemd für Absturzwiederherstellung, Gesundheitsprüfungen und Überwachung in Produktionsumgebungen konfigurieren.
Inhaltsverzeichnis
Einführung
In Produktionsumgebungen ist es unvermeidlich, dass Dienste unerwartet abstürzen. Richtig konfigurierte Auto-Neustart-Mechanismen minimieren Ausfallzeiten und verbessern die Systemzuverlässigkeit.
Schritt 1: Aktuellen Dienststatus prüfen
# Dienststatus
systemctl status service_name
# Dienstprotokolle
journalctl -u service_name -n 50
# Neustart-Anzahl
systemctl show service_name | grep NRestarts
# Alle fehlgeschlagenen Dienste
systemctl --failed
Schritt 2: systemd Auto-Neustart-Konfiguration
[Unit]
Description=Mein Dienst
After=network.target
[Service]
Type=simple
User=www-data
ExecStart=/usr/bin/myapp
Restart=always
RestartSec=5
StartLimitIntervalSec=60
StartLimitBurst=5
[Install]
WantedBy=multi-user.target
Neustart-Optionen
| Option | Beschreibung |
|---|---|
Restart=no | Kein Auto-Neustart (Standard) |
Restart=always | In allen Fällen neu starten |
Restart=on-failure | Nur bei Fehler neu starten |
Restart=on-abnormal | Bei abnormalem Beenden neu starten |
# Neu laden und starten
sudo systemctl daemon-reload
sudo systemctl enable service_name
sudo systemctl start service_name
Schritt 3: Erweiterte Konfiguration
[Service]
Restart=on-failure
RestartSec=10
# Stoppen wenn mehr als 5 Mal in 5 Minuten fehlschlägt
StartLimitIntervalSec=300
StartLimitBurst=5
# Speicherlimit
MemoryMax=512M
Schritt 4: Anwendungsspezifische Konfigurationen
Node.js-Anwendung
[Unit]
Description=Meine Node.js-App
After=network.target
[Service]
Type=simple
User=nodeuser
WorkingDirectory=/var/www/app
ExecStart=/usr/bin/node /var/www/app/index.js
Restart=always
RestartSec=5
Environment=NODE_ENV=production
[Install]
WantedBy=multi-user.target
Docker-Container
# docker-compose.yml
services:
app:
image: myapp
restart: unless-stopped
Schritt 5: Fehlerbehebung
# Warum startet der Dienst nicht?
journalctl -u service_name -n 100 --no-pager
# Fehlerzähler zurücksetzen
systemctl reset-failed service_name
Wenn StartLimitBurst erreicht wird, stoppt systemd den Auto-Neustart. Verwenden Sie systemctl reset-failed service_name, um den Zähler zurückzusetzen.
Fazit
Die systemd Auto-Neustart-Konfiguration verbessert die Dienstzuverlässigkeit in der Produktion erheblich. Verwenden Sie Restart=always oder Restart=on-failure für die Grundkonfiguration, setzen Sie das Neustart-Intervall mit RestartSec und verhindern Sie Endlosschleifen mit StartLimitBurst.
Verwandte Artikel
SSH-Verbindungsproblem: Keine Verbindung zum Server möglich
Anleitung zur Behebung von SSH-Verbindungsproblemen: Path.net Firewall-Regeln, Default Block, Filterregel für SSH-Port erstellen und Fehlerbehebungsschritte.
RDP-Verbindungsproblem: Keine Verbindung zu Windows Server
Anleitung zur Behebung von RDP-Verbindungsproblemen: Path.net Firewall-Regeln, Default Block, Filterregel für RDP-Port erstellen und Fehlerbehebungsschritte.
MTR-Test durchführen und Ergebnisse an Support senden
Anleitung zum Netzwerktest mit WinMTR und Linux MTR, ICMP-Filterregel erstellen und Ergebnisse an das Support-Team senden. Paketverlust und Latenz diagnostizieren.