Zum Hauptinhalt springen
Zurück zur Kategorie

Automatischer Dienst-Neustart mit systemd konfigurieren

Automatischen Dienst-Neustart mit systemd für Absturzwiederherstellung, Gesundheitsprüfungen und Überwachung in Produktionsumgebungen konfigurieren.

Lesezeit: 11 min Fehlerbehebung
systemddienstauto restartwatchdoglinuxuptimezuverlässigkeit

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

hljs bash
# 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

hljs ini
[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

OptionBeschreibung
Restart=noKein Auto-Neustart (Standard)
Restart=alwaysIn allen Fällen neu starten
Restart=on-failureNur bei Fehler neu starten
Restart=on-abnormalBei abnormalem Beenden neu starten
hljs bash
# Neu laden und starten
sudo systemctl daemon-reload
sudo systemctl enable service_name
sudo systemctl start service_name

Schritt 3: Erweiterte Konfiguration

hljs ini
[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

hljs ini
[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

hljs yaml
# docker-compose.yml
services:
  app:
    image: myapp
    restart: unless-stopped

Schritt 5: Fehlerbehebung

hljs bash
# 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.