Zum Hauptinhalt springen
Zurück zur Kategorie

Dienststartprobleme nach Neustart

Diagnose und Behebung von Dienststartproblemen nach Server-Neustart: systemctl, fehlgeschlagene Dienste, Boot-Log-Analyse und systemd-Konfiguration.

Lesezeit: 11 Min. Fehlerbehebung
neustartsystemctldienstbootstartsystemd

Inhaltsverzeichnis

Einführung

Nach einem Server-Neustart starten einige Dienste möglicherweise nicht automatisch, was zu Ausfallzeiten führt. Diese Anleitung behandelt die Diagnose und Behebung von Dienststartproblemen nach einem Neustart.

Fehlgeschlagene Dienste prüfen

hljs bash
# Alle fehlgeschlagenen Dienste auflisten
sudo systemctl list-units --type=service --state=failed

# Status eines bestimmten Dienstes prüfen
sudo systemctl status DIENST_NAME

# Alle Dienste und ihre Zustände anzeigen
sudo systemctl list-units --type=service --all

Boot-Logs lesen

hljs bash
# Aktuelle Boot-Logs anzeigen
journalctl -b

# Vorherige Boot-Logs anzeigen
journalctl -b -1

# Nach Dienst filtern
journalctl -b -u DIENST_NAME

# Nur Fehler anzeigen
journalctl -b -p err

# Boot-Zeit-Analyse
systemd-analyze

# Dienst-Startzeiten
systemd-analyze blame

# Kritische Kette
systemd-analyze critical-chain

systemd-analyze blame zeigt, welche Dienste am längsten zum Starten brauchten.

Dienste für Auto-Start aktivieren

hljs bash
# Dienst beim Boot aktivieren
sudo systemctl enable DIENST_NAME

# Aktivieren und sofort starten
sudo systemctl enable --now DIENST_NAME

# Prüfen ob Dienst aktiviert ist
systemctl is-enabled DIENST_NAME

# Alle aktivierten Dienste auflisten
systemctl list-unit-files --type=service --state=enabled

Häufig zu aktivierende Dienste

hljs bash
sudo systemctl enable ssh
sudo systemctl enable nginx
sudo systemctl enable apache2
sudo systemctl enable mysql
sudo systemctl enable docker
sudo systemctl enable fail2ban

Dienstabhängigkeiten

hljs bash
# Dienstabhängigkeiten anzeigen
systemctl list-dependencies DIENST_NAME

# Umgekehrte Abhängigkeiten
systemctl list-dependencies --reverse DIENST_NAME

# Dienst-Unit-Datei anzeigen
systemctl cat DIENST_NAME

Abhängigkeiten in Unit-Dateien konfigurieren

hljs ini
[Unit]
Description=Meine Anwendung
After=network.target mysql.service
Requires=mysql.service
Wants=redis.service

[Service]
Type=simple
User=www-data
WorkingDirectory=/opt/myapp
ExecStart=/opt/myapp/start.sh
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

Wichtige Direktiven:

  • After=: Nach diesen Units starten
  • Requires=: Harte Abhängigkeit
  • Wants=: Weiche Abhängigkeit
  • Before=: Vor diesen Units starten

Boot-Reihenfolge-Analyse

hljs bash
systemd-analyze time
systemd-analyze blame | head -20
systemd-analyze critical-chain
systemd-analyze plot > boot-chart.svg

Wenn die Boot-Zeit zu lang ist, deaktivieren Sie unnötige Dienste mit sudo systemctl disable DIENST_NAME.

Benutzerdefinierten Systemd-Dienst erstellen

hljs ini
# /etc/systemd/system/myapp.service
[Unit]
Description=Benutzerdefinierte Anwendung
After=network.target

[Service]
Type=simple
User=appuser
WorkingDirectory=/opt/myapp
ExecStart=/opt/myapp/bin/start
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target
hljs bash
sudo systemctl daemon-reload
sudo systemctl enable --now myapp
sudo systemctl status myapp

Häufige Probleme beheben

Dienst schlägt mit Exit-Code fehl

hljs bash
journalctl -u DIENST_NAME -n 50 --no-pager
systemctl cat DIENST_NAME
ls -la /pfad/zum/binary

Dienst startet zu früh

hljs ini
[Unit]
After=network-online.target
Wants=network-online.target

Dienst startet ständig neu

hljs bash
systemctl show DIENST_NAME -p NRestarts
journalctl -u DIENST_NAME --since "5 minutes ago"
sudo systemctl stop DIENST_NAME
sudo systemctl reset-failed DIENST_NAME

Fazit

Dienststartprobleme nach Neustart sind häufig, aber leicht vermeidbar. Stellen Sie sicher, dass kritische Dienste mit systemctl enable aktiviert sind, konfigurieren Sie korrekte Abhängigkeiten und prüfen Sie regelmäßig Boot-Logs auf Fehler.