4.7 Dienststartfehler analysieren Ein Dienststartfehler liegt vor, wenn ein Dienst nicht gestartet werden kann, im Startvorgang hängen bleibt oder unmittelbar nach dem Start wieder beendet wird. Grundsatz: Nicht mehrfach auf „Starten“ klicken. Zuerst Status, Exitcode, Protokolle und Startkonfiguration sichern, damit die ursprüngliche Fehlerursache nicht durch Folgeereignisse verdeckt wird. Ziele dieser Seite Nach dieser Seite sollst du: verschiedene Arten von Dienststartfehlern unterscheiden können, Exitcodes und Beendigungsursachen erfassen können, Programmpfad und Startparameter prüfen können, Fehler des Dienstkontos und der Berechtigungen erkennen können, fehlende Abhängigkeiten und Ressourcen identifizieren können, Zeitüberschreitungen und sofortige Prozessabbrüche unterscheiden können, Startbegrenzungen und Neustartschleifen erkennen können, Windows-, systemd- und launchd-Startfehler analysieren können, einen kontrollierten Startversuch vorbereiten und auswerten können. 1. Arten von Dienststartfehlern unterscheiden Fehlerbild Beschreibung Mögliche Ursache Dienst nicht gefunden Dienstverwaltung kennt den Namen nicht Falscher Name, Dienst nicht installiert oder andere Umgebung Dienst deaktiviert Start wird durch Konfiguration verhindert Bewusste Deaktivierung oder fehlerhafte Änderung Dienst maskiert systemd blockiert den Start vollständig Administrativer Schutz oder fehlerhafte Maskierung Programmdatei fehlt Angegebene ausführbare Datei ist nicht vorhanden Unvollständiges Update, Löschung oder falscher Pfad Zugriff verweigert Dienst darf Programm, Datei oder Ressource nicht verwenden Konto- oder Berechtigungsfehler Abhängigkeit fehlt Benötigter Dienst oder Backend ist nicht verfügbar Dienst-, DNS-, Netzwerk- oder Speicherfehler Start dauert zu lange Dienst meldet nicht rechtzeitig Betriebsbereitschaft Blockierte Initialisierung oder langsames Backend Prozess beendet sich sofort Programm startet und bricht unmittelbar ab Konfiguration, Portkonflikt oder fehlende Ressource Prozess stürzt ab Unbehandelte Ausnahme oder schwerer Laufzeitfehler Softwarefehler, Bibliothek oder inkompatible Version Neustartschleife Dienst wird automatisch fortlaufend neu gestartet Wiederherstellungsregel und unveränderte Fehlerursache Startgrenze erreicht Dienstverwaltung unterbindet weitere Versuche Zu viele Fehlstarts innerhalb kurzer Zeit Dienst läuft, ist aber nicht bereit Prozess existiert, Initialisierung ist unvollständig Backend, Migration, Cache oder Healthcheck 2. Mindestinformationen vor einem neuen Startversuch sichern [ ] Datum, Uhrzeit und Zeitzone [ ] Server und Betriebssystem [ ] Interner Dienstname beziehungsweise launchd-Label [ ] Aktueller Dienststatus [ ] Startart beziehungsweise Aktivierungszustand [ ] Prozess-ID, falls vorhanden [ ] Letzter Exitcode [ ] Dienstspezifischer Exitcode [ ] Programmpfad und Startparameter [ ] Dienstkonto [ ] Formale Abhängigkeiten [ ] Wiederherstellungs- und Neustartregeln [ ] Relevante Systemprotokolle [ ] Relevante Anwendungsprotokolle [ ] Letzte Konfigurations- oder Softwareänderung Erst nach dieser Sicherung sollte ein weiterer kontrollierter Startversuch durchgeführt werden. 3. Allgemeiner Diagnoseweg bei Startfehlern Dienst vorhanden? ↓ Aktiviert und nicht blockiert? ↓ Programmpfad vorhanden? ↓ Startkonfiguration syntaktisch gültig? ↓ Dienstkonto gültig? ↓ Datei- und Verzeichnisrechte ausreichend? ↓ Abhängigkeiten verfügbar? ↓ Port und andere Ressourcen verfügbar? ↓ Prozess startet? ↓ Prozess bleibt aktiv? ↓ Dienst meldet Betriebsbereitschaft? ↓ Anwendungstest erfolgreich? Empfohlene Reihenfolge: Exakten Dienstnamen bestätigen. Aktuellen Status erfassen. Exitcode und Protokolle sichern. Startart und Blockierungen prüfen. Programmpfad und Argumente kontrollieren. Dienstkonto und Berechtigungen prüfen. Abhängigkeiten testen. Portkonflikte und Ressourcen prüfen. Konfiguration mit Herstellerwerkzeug validieren. Einen einzelnen kontrollierten Startversuch durchführen. Protokolle während dieses Versuchs beobachten. Ergebnis dokumentieren und erneut bewerten. 4. Windows-Dienststatus und Exitcodes erfassen Grundlegenden Dienststatus anzeigen: [RO] Get-Service -Name "" Erweiterte Dienstinformationen anzeigen: [RO] Get-CimInstance Win32_Service -Filter "Name=''" | Select-Object Name, DisplayName, State, Status, StartMode, StartName, ProcessId, ExitCode, ServiceSpecificExitCode Status mit sc.exe prüfen: [RO] sc.exe queryex "" Wichtige Angaben: Angabe Bedeutung STATE Aktueller Dienstzustand WIN32_EXIT_CODE Windows- beziehungsweise Dienstausgangscode SERVICE_EXIT_CODE Dienstspezifischer Ausgangscode CHECKPOINT Fortschrittswert bei längeren Zustandswechseln WAIT_HINT Vom Dienst geschätzte Wartezeit PID Aktuelle Prozess-ID, sofern vorhanden Ein Exitcode 0 ist nur dann aussagekräftig, wenn der Dienst regulär beendet wurde. Ein Dienst kann trotzdem seine vorgesehene Funktion nicht bereitgestellt haben. 5. Windows-Startkonfiguration prüfen Konfiguration des Dienstes anzeigen: [RO][SENS] sc.exe qc "" Konfiguration über CIM anzeigen: [RO][SENS] Get-CimInstance Win32_Service -Filter "Name=''" | Select-Object Name, StartMode, StartName, PathName, ServiceType, DesktopInteract Zu prüfen sind: Feld Prüffrage BINARY_PATH_NAME beziehungsweise PathName Ist der Programmpfad korrekt? Startparameter Sind Argumente vollständig und korrekt maskiert? SERVICE_START_NAME beziehungsweise StartName Wird das vorgesehene Dienstkonto verwendet? START_TYPE beziehungsweise StartMode Ist der Dienst deaktiviert? DEPENDENCIES Sind alle formalen Abhängigkeiten vorhanden? TYPE beziehungsweise ServiceType Passt die Dienstart zur Anwendung? Wichtig bei Programmpfaden: Programmpfad und Argumente dürfen nicht verwechselt werden. Leerzeichen im Pfad erfordern korrekte Anführungszeichen. Relative Pfade können im Dienstkontext anders aufgelöst werden. Ein Netzlaufwerksbuchstabe aus einer Benutzersitzung steht einem Dienst normalerweise nicht automatisch zur Verfügung. Das Dienstkonto muss auf Programm, Arbeitsverzeichnis und Konfiguration zugreifen können. 6. Windows-Programmpfad kontrolliert prüfen Da PathName auch Argumente enthalten kann, darf die gesamte Zeichenfolge nicht ungeprüft an Test-Path übergeben werden. Konfigurierte Zeichenfolge zunächst nur anzeigen: [RO][SENS] Get-CimInstance Win32_Service -Filter "Name=''" | Select-Object Name, PathName Anschließend wird der tatsächliche ausführbare Pfad aus der Ausgabe ermittelt und separat geprüft: [RO][FILE] Test-Path -LiteralPath "" Dateiinformationen anzeigen: [RO][FILE][SENS] Get-Item -LiteralPath "" | Select-Object FullName, Length, CreationTime, LastWriteTime, VersionInfo Berechtigungen anzeigen: [RO][FILE][SENS] Get-Acl -LiteralPath "" | Format-List Zusätzlich prüfen: Ist die Datei tatsächlich vorhanden? Wurde sie kürzlich ersetzt oder verschoben? Passt die Architektur zum Betriebssystem? Sind benötigte Bibliotheken vorhanden? Blockiert Sicherheitssoftware die Ausführung? Liegt die Datei auf einem beim Start noch nicht verfügbaren Datenträger? Ist der Pfad lokal oder von einer Netzwerkressource abhängig? 7. Windows-Dienstkonto und Anmelderechte prüfen Dienstkonto anzeigen: [RO] Get-CimInstance Win32_Service -Filter "Name=''" | Select-Object Name, StartName, State, StartMode Mögliche Kontotypen: LocalSystem , NT AUTHORITY\LocalService , NT AUTHORITY\NetworkService , virtuelles Dienstkonto, verwaltetes Dienstkonto, lokales Benutzerkonto, Domänenkonto. Zu prüfen: Existiert das Konto? Ist es aktiviert oder gesperrt? Ist ein hinterlegtes Kennwort abgelaufen oder geändert worden? Besitzt es das Recht „Anmelden als Dienst“? Darf es die Programmdatei lesen und ausführen? Darf es Konfigurations- und Datenverzeichnisse verwenden? Darf es Zertifikate und private Schlüssel verwenden? Darf es auf Netzwerkressourcen zugreifen? Wurde das Konto kürzlich geändert? Funktioniert ein verwaltetes Dienstkonto ordnungsgemäß? Ein manueller Programmstart als Administrator beweist nicht, dass das Programm unter dem tatsächlichen Dienstkonto funktioniert. 8. Typische Windows-Startfehler einordnen Fehler Typische Bedeutung Prüfrichtung Fehler 2 Angegebene Datei wurde nicht gefunden Programmpfad, Bibliothek oder Konfigurationspfad Fehler 5 Zugriff verweigert Konto, Rechte oder Sicherheitssoftware Fehler 1068 Abhängigkeitsdienst oder Abhängigkeitsgruppe konnte nicht gestartet werden Formale Abhängigkeiten Fehler 1069 Anmeldung des Dienstkontos fehlgeschlagen Konto, Kennwort und Anmelderecht Fehler 1053 Dienst antwortete nicht rechtzeitig auf Start- oder Steuerungsanforderung Initialisierung, Timeout, Programmfehler Fehler 1067 Prozess wurde unerwartet beendet Anwendungsprotokoll, Konfiguration oder Absturz Fehler 1079 Konto stimmt nicht mit anderen Diensten im gemeinsamen Prozess überein Dienstkonto und gemeinsam verwendeter Prozess Fehler 193 Keine gültige Win32-Anwendung Architektur, Dateityp oder fehlerhafte Programmdatei Die vollständige Fehlermeldung, das betroffene Produkt und die Windows-Version müssen immer mit dokumentiert werden. Die Tabelle ist eine Eingrenzungshilfe, kein Ersatz für die konkrete Herstellerdiagnose. 9. Windows-Ereignisse eines Startversuchs auswerten Service-Control-Manager-Ereignisse der letzten Stunde: [RO][SENS] Get-WinEvent -FilterHashtable @{ LogName = "System" ProviderName = "Service Control Manager" StartTime = (Get-Date).AddHours(-1) } | Select-Object TimeCreated, Id, LevelDisplayName, Message Typische startbezogene Ereignisse filtern: [RO][SENS] Get-WinEvent -FilterHashtable @{ LogName = "System" ProviderName = "Service Control Manager" Id = 7000, 7001, 7009, 7011, 7023, 7024, 7031, 7034 StartTime = (Get-Date).AddHours(-24) } | Select-Object TimeCreated, Id, LevelDisplayName, Message System- und Anwendungsereignisse im festen Zeitfenster verbinden: [RO][SENS] $startTime = Get-Date "2026-07-31 09:10:00" $endTime = Get-Date "2026-07-31 09:20:00" Get-WinEvent -FilterHashtable @{ LogName = "System", "Application" StartTime = $startTime EndTime = $endTime } | Sort-Object TimeCreated | Select-Object TimeCreated, LogName, ProviderName, Id, LevelDisplayName, Message 10. Windows-Wiederherstellungsaktionen prüfen Ein Dienst kann nach einem Fehlstart oder Absturz automatisch neu gestartet werden. Konfigurierte Fehleraktionen anzeigen: [RO] sc.exe qfailure "" Zusätzlichen Fehleraktionsstatus anzeigen: [RO] sc.exe qfailureflag "" Mögliche Aktionen: keine Aktion, Dienst neu starten, Programm ausführen, Computer neu starten. Prüffragen: Wird der Dienst automatisch neu gestartet? Nach welcher Wartezeit? Wie viele Versuche erfolgen? Wann wird der Fehlerzähler zurückgesetzt? Wird auch bei einem normalen Prozessende eine Fehleraktion ausgelöst? Verändert die Wiederherstellung die sichtbare PID? Verdeckt die Automatik einen wiederkehrenden Startfehler? Wiederherstellungsregeln dürfen nicht ungeprüft verändert werden. Sie können die Verfügbarkeit und das Verhalten bei Abstürzen erheblich beeinflussen. 11. systemd-Status und Startursache unter Linux prüfen Ausführlichen Status anzeigen: [RO][SENS][PRIV] sudo systemctl status "" --no-pager Wichtige Zustände strukturiert anzeigen: [RO] systemctl show "" \ --property=LoadState,ActiveState,SubState,UnitFileState,Result,MainPID,ExecMainCode,ExecMainStatus,StatusErrno,NRestarts Prüfen, ob die Unit aktiviert ist: [RO] systemctl is-enabled "" Prüfen, ob sie fehlgeschlagen ist: [RO] systemctl is-failed "" Alle fehlgeschlagenen Units anzeigen: [RO] systemctl --failed --no-pager Wichtige Angaben: Eigenschaft Bedeutung LoadState Wurde die Unit korrekt geladen? ActiveState Übergeordneter Aktivzustand SubState Detaillierter Unterzustand Result Ergebnis des letzten Start- oder Laufvorgangs MainPID PID des Hauptprozesses ExecMainCode Art der Prozessbeendigung ExecMainStatus Exitcode oder Signalnummer StatusErrno Gemeldeter Fehlerwert, sofern vorhanden NRestarts Anzahl automatischer Neustarts 12. systemd-Ergebniswerte interpretieren Mögliche Result -Werte können unter anderem sein: Ergebnis Typische Bedeutung success Vorgang wurde aus Sicht von systemd erfolgreich beendet exit-code Prozess beendete sich mit nicht als erfolgreich bewertetem Exitcode signal Prozess wurde durch ein Signal beendet core-dump Prozess wurde durch Signal beendet und erzeugte einen Core Dump timeout Start-, Stopp- oder Laufzeitgrenze wurde überschritten watchdog Watchdog-Reaktion blieb aus start-limit-hit Zu viele Startversuche in kurzer Zeit resources Benötigte Systemressource konnte nicht bereitgestellt werden protocol Dienst erfüllte das erwartete Startprotokoll nicht dependency Eine benötigte Unit schlug fehl exec-condition Eine konfigurierte Startbedingung verhinderte den Start Beendigungsart: ExecMainCode Grundbedeutung exited Prozess beendete sich über einen Exitcode killed Prozess wurde durch ein Signal beendet dumped Prozess wurde durch Signal beendet und erzeugte möglicherweise einen Dump Die konkrete Bedeutung von ExecMainStatus hängt davon ab, ob der Prozess regulär beendet oder durch ein Signal beendet wurde. Zusätzlich muss die Dokumentation des Programms geprüft werden. 13. systemd-Unit und wirksame Startparameter prüfen Wirksame Unit einschließlich Drop-ins anzeigen: [RO][FILE][SENS] systemctl cat "" Wichtige Startparameter strukturiert anzeigen: [RO][SENS] systemctl show "" \ --property=Type,User,Group,ExecStart,ExecStartPre,ExecStartPost,WorkingDirectory,EnvironmentFiles,FragmentPath,DropInPaths Unit-Datei formal prüfen: [RO][FILE] systemd-analyze verify "" Zu prüfen sind: Type= , ExecStart= , ExecStartPre= , ExecStartPost= , User= und Group= , WorkingDirectory= , EnvironmentFile= , PIDFile= , RuntimeDirectory= , StateDirectory= , TimeoutStartSec= , Restart= , RestartSec= , StartLimitIntervalSec= , StartLimitBurst= . systemd-analyze verify benötigt den tatsächlichen Pfad einer Unit-Datei. Der Pfad sollte mit systemctl show --property=FragmentPath ermittelt werden. 14. Linux-Programmpfad und Berechtigungen prüfen Konfigurierten Startbefehl anzeigen: [RO][SENS] systemctl show "" --property=ExecStart Datei des bekannten Programmpfads prüfen: [RO][FILE] stat "" Dateityp und Architektur prüfen: [RO][FILE] file "" Berechtigungen aller Pfadbestandteile anzeigen: [RO][FILE] namei -l "" Dynamische Bibliotheksabhängigkeiten eines geeigneten dynamischen ELF-Programms anzeigen: [RO][FILE][SENS] ldd "" Wichtiger Sicherheitshinweis: ldd sollte nicht ungeprüft auf nicht vertrauenswürdige ausführbare Dateien angewendet werden. Abhängig von System und Binärdatei kann die Auswertung Sicherheitsrisiken besitzen. Alternativ kann bei ELF-Dateien zunächst statisch geprüft werden: [RO][FILE] readelf -d "" Zu prüfen: Datei vorhanden, ausführbar, richtige Architektur, korrekter Interpreter, benötigte Bibliotheken vorhanden, Dienstkonto kann alle Pfadbestandteile durchlaufen, Arbeitsverzeichnis vorhanden, Dateisystem nicht schreibgeschützt, Sicherheitsmechanismen wie SELinux oder AppArmor berücksichtigt. 15. Linux-Dienstkonto und Dienstkontext prüfen Konfiguriertes Konto anzeigen: [RO] systemctl show "" --property=User,Group,DynamicUser Benutzerkonto prüfen: [RO] getent passwd "" Gruppenmitgliedschaften anzeigen: [RO] id "" Arbeitsverzeichnis prüfen: [RO] systemctl show "" --property=WorkingDirectory Referenzierte Umgebungsdateien anzeigen: [RO][SENS] systemctl show "" --property=EnvironmentFiles Zu prüfen: Existiert der Dienstbenutzer? Existiert die konfigurierte Gruppe? Sind Dateirechte ausreichend? Ist ein dynamischer Benutzer vorgesehen? Existiert das Arbeitsverzeichnis? Kann das Konto Konfigurations- und Datendateien lesen? Kann es in erforderliche Verzeichnisse schreiben? Kann es privilegierte Ports oder Geräte verwenden? Blockieren SELinux, AppArmor oder systemd-Sandboxing den Zugriff? Sind Secrets für den Dienstkontext verfügbar? Das Starten des Programms als root ist kein gültiger Nachweis für die Funktion unter dem tatsächlichen Dienstkonto. 16. systemd-Protokolle eines Startfehlers auswerten Protokolle des aktuellen Systemstarts: [RO][SENS][PRIV] sudo journalctl \ -b \ -u "" \ --no-pager Letzte 100 Einträge: [RO][SENS][PRIV] sudo journalctl \ -u "" \ -n 100 \ --output=short-iso \ --no-pager Fehler und schwerwiegendere Meldungen: [RO][SENS][PRIV] sudo journalctl \ -u "" \ -p err \ --since "1 hour ago" \ --no-pager Dienst- und Systemmeldungen im selben Zeitfenster: [RO][SENS][PRIV] sudo journalctl \ --since "2026-07-31 09:10:00" \ --until "2026-07-31 09:20:00" \ --output=short-iso \ --no-pager Kernelmeldungen berücksichtigen: [RO][SENS][PRIV] sudo journalctl \ -k \ -b \ -p warning \ --no-pager 17. systemd-Neustartschleife und Startbegrenzung erkennen Neustartregeln anzeigen: [RO] systemctl show "" \ --property=Restart,RestartUSec,NRestarts Startbegrenzung anzeigen: [RO] systemctl show "" \ --property=StartLimitIntervalUSec,StartLimitBurst,Result Anzeichen: NRestarts steigt, PID wechselt fortlaufend, Prozesslaufzeit bleibt sehr kurz, Result=start-limit-hit , Journal zeigt wiederholte identische Startfehler, Dienst ist zwischen den Versuchen kurz erreichbar, Healthcheck schlägt fortlaufend fehl. Fehlerstatus erst nach der Beweissicherung zurücksetzen: [CHANGE][PRIV] sudo systemctl reset-failed "" reset-failed : startet den Dienst nicht, löscht aber den gespeicherten Fehlerzustand, setzt bestimmte Zähler für Startbegrenzungen zurück, verändert damit Diagnosezustand. Dieser Befehl darf deshalb erst nach Dokumentation von Result , NRestarts , Status und Journal verwendet werden. 18. systemd-Diensttypen als mögliche Fehlerursache prüfen Type= Erwartetes Verhalten simple Gestarteter Prozess gilt unmittelbar als Hauptprozess exec Start gilt nach erfolgreichem Ausführen des Programms als erfolgt forking Programm erzeugt Hintergrundprozess; häufig mit PID-Datei oneshot Prozess führt Aufgabe aus und beendet sich wieder notify Dienst meldet systemd ausdrücklich Betriebsbereitschaft dbus Bereitschaft hängt von einem D-Bus-Namen ab idle Ausführung wird verzögert, bis andere Jobs abgearbeitet sind Mögliche Fehlkonfigurationen: forking verwendet falsche oder fehlende PID-Datei, notify -Dienst sendet keine Bereitschaftsmeldung, oneshot wird fälschlich als dauerhaft laufender Prozess erwartet, Programm forkt, obwohl Type=simple ungeeignet konfiguriert wurde, Wrapperprozess beendet sich und systemd überwacht nicht den erwarteten Prozess, Startbefehl blockiert und erreicht den vorgesehenen Zustand nicht. Der korrekte Diensttyp muss anhand der Programmdokumentation und des tatsächlichen Prozessverhaltens bestimmt werden. 19. launchd-Status und letzten Exitstatus unter macOS prüfen Systemweiten Dienst prüfen: [RO] launchctl print "system/