Kurze Antwort
Wenn ein systemd-Dienst nicht startet, prüfen Sie zuerst den Status mit `systemctl status dienstname` und sehen Sie die Logs mit `journalctl -u dienstname` ein. Die Ursache kann ein Konfigurationsfehler, eine fehlende Datei, falsche Berechtigungen oder eine fehlgeschlagene Abhängigkeit sein. Folgen Sie den Schritten zur systematischen Diagnose.
So erkennen Sie das Problem
- Dienst ist im Zustand failed oder inactive
- Starten des Dienstes gibt einen Fehler zurück
- Dienst startet und stürzt sofort ab
- Anwendung auf dem Port antwortet nicht
- In den Logs erscheinen Fehlermeldungen
Häufigste Ursachen
Fehler in der Dienstkonfiguration
Eine fehlerhafte Unit-Datei, ein falscher Pfad zur ausführbaren Datei oder fehlende Parameter verhindern den Start.
Fehlende Berechtigungen oder Eigentümerschaft
Der Dienst hat möglicherweise keine Rechte, die Konfiguration zu lesen, in ein Verzeichnis zu schreiben oder auf das Netzwerk zuzugreifen.
Abhängigkeit nicht erfüllt
Der Dienst hängt von einem anderen Dienst, dem Netzwerk oder einer Datenträgermontage ab, die zum Startzeitpunkt nicht verfügbar sind.
Port ist belegt
Eine andere Anwendung belegt bereits den Port, den der Dienst belegen möchte.
Fehlende Dateien oder Bibliotheken
Die ausführbare Datei, die Konfigurationsdatei oder eine gemeinsam genutzte Bibliothek existiert nicht am erwarteten Ort.
Lösung Schritt für Schritt
- 1
Prüfen Sie den Dienststatus
Führen Sie
systemctl status dienstnameaus. Achten Sie auf den Zustand (failed, inactive) und die letzten Fehlermeldungen. Der Status gibt oft den ersten Hinweis auf die Ursache. - 2
Sehen Sie die Logs ein
Verwenden Sie
journalctl -u dienstname -xefür detaillierte Logs. Die Option-espringt ans Ende,-xliefert Erklärungen. Wenn der Dienst kürzlich abgestürzt ist, fügen Sie--since "10 min ago"hinzu. - 3
Prüfen Sie die Unit-Datei
Führen Sie
systemctl cat dienstnameaus, um den Inhalt der Unit-Datei zu sehen. Stellen Sie sicher, dass die Pfade zur ausführbaren Datei und zur Konfiguration korrekt sind und keine Syntaxfehler vorliegen. - 4
Testen Sie die ausführbare Datei manuell
Führen Sie den Befehl aus
ExecStartmanuell als der inUser=angegebene Benutzer aus. Wenn es manuell funktioniert, liegt das Problem in der Dienstumgebung (Variablen, Berechtigungen). - 5
Prüfen Sie Berechtigungen und Eigentümerschaft
Stellen Sie sicher, dass der Dienstbenutzer Lese- und Schreibrechte auf die erforderlichen Verzeichnisse hat. Verwenden Sie
ls -lundnamei -lzur Pfadprüfung. - 6
Prüfen Sie die Abhängigkeiten
Führen Sie
systemctl list-dependencies dienstnameaus. Stellen Sie sicher, dass alle Abhängigkeiten aktiv sind. Sie können den abhängigen Dienst manuell starten und es erneut versuchen. - 7
Prüfen Sie, ob der Port belegt ist
Verwenden Sie
sudo ss -tulnp | grep :PORT, um zu sehen, welcher Prozess den Port hält. Wenn er belegt ist, prüfen Sie den Prozess und stoppen Sie ihn nur, wenn es sicher ist, oder ändern Sie den Port in der Konfiguration. - 8
Laden Sie systemd neu und starten Sie den Dienst
Nach Änderungen an der Unit-Datei führen Sie
systemctl daemon-reloadaus, dannsystemctl start dienstname. Prüfen Sie erneut den Status.
Wenn nichts hilft
Wenn der Dienst immer noch nicht startet, prüfen Sie, ob eine Ressourcenbeschränkung (z. B. LimitNOFILE) oder SELinux/AppArmor vorliegt. Wenn Sie SELinux testen, schalten Sie es vorübergehend in den permissive-Modus (setenforce 0) nur auf einem Testsysten und stellen Sie es sofort wieder auf enforcing (setenforce 1); deaktivieren Sie den Schutz nicht dauerhaft auf einem Produktionssystem. Sehen Sie auch die Systemlogs (journalctl -b) auf Fehler ein, die nicht direkt mit dem Dienst zusammenhängen. Für komplexe Fälle führen Sie den Befehl aus ExecStart unter strace -f aus, um zu sehen, wo er stoppt.
So beugen Sie vor
- Aktualisieren Sie systemd und Dienste regelmäßig
- Verwenden Sie `systemd-analyze verify` zur Prüfung von Unit-Dateien
- Richten Sie eine Überwachung für kritische Dienste ein
- Führen Sie ein Änderungsprotokoll über Konfigurationsänderungen
Wann Sie einen Profi rufen sollten
Wenn Sie alle Schritte ausprobiert haben und der Dienst immer noch nicht funktioniert, oder wenn Sie keinen Zugriff auf das Root-Konto haben, wenden Sie sich an den IT-Support. Dieser kann das System tiefer analysieren und fortgeschrittene Techniken sicher anwenden.
IT-Infrastruktur-Wartung · Server, Netzwerke, Backup, Sicherheit und HelpdeskHäufige Fragen
Wie sehe ich alle Logs für einen Dienst?
Verwenden Sie `journalctl -u dienstname` ohne die Option `-e`, um alle Einträge zu sehen. Sie können `-f` hinzufügen, um die Logs in Echtzeit zu verfolgen.
Was bedeutet der Fehler "status=203/EXEC"?
Er zeigt an, dass systemd den Befehl aus `ExecStart` nicht ausführen konnte. Prüfen Sie den Pfad, die Berechtigungen und ob die Datei existiert.
Wie ändere ich den Benutzer, unter dem der Dienst ausgeführt wird?
Ändern Sie `User=` in der Unit-Datei (am besten über `systemctl edit dienstname`), führen Sie dann `systemctl daemon-reload` aus und starten Sie den Dienst neu.