Neulich hatte ich ein Problem mit einem Dienst, welcher von Zeit zu Zeit seine Tätigkeit eingestellt hat. Um das Problem zu beheben habe ich den Dienst automatisch 3 mal am Tag per Aufgabenplanung neu starten gelassen. Nun kam es aber vor, dass der Dienst beim Beenden hängen geblieben ist und im Status auf „Wird beendet“ verweilte. Damit dies nicht mehr passieren kann, habe ich mir ein Batchscript gebastelt, welches alle 5 Minuten prüft ob der Dienst abgestürzt ist. In diesem Artikel zeige ich euch meine Vorgehensweise um einen abgestürzten Dienst automatisch zu beenden und wieder neu zu starten.
Zunächst müsst ihr herausfinden wie der Dienst heißt. Dazu geht ihr in die Verwaltungskonsole für Dienste, sucht den Dienst der Probleme bereitet und geht per Rechtsklick auf Eigenschaften.
Dort findet ihr nun den Dienstnamen. In meinem Beispiel Spooler. Öffnet anschließend ein CMD Fenster mit Adminrechten und schaut euch den Status des Dienstes mit folgendem Befehl an:
sc queryex Spooler
Hier seht ihr unter anderem den Status und die PID. Mit diesen Informationen könnt ihr den Dienst nun entweder einmalig mittels Taskkill beenden oder das Ganze per Script automatisieren. In meinem Fall stand der Status dauerhaft auf STOP_PENDING, also zu deutsch „Wird beendet“. Er lies sich über die grafische Oberfläche nicht mehr beenden oder neu starten.
- Hochauflösender 4K UHD Samsung Fernseher mit PurColor-Technologie für lebensechte Farben, die dich in ihren Bann ziehen
- Crystal-Prozessor 4K mit leistungsstarkem 4K-Upscaling für äußerst farbtreue und realitätsnahe Nuancen
- Mit Motion Xcelerator flüssige Bewegungen für ein klares Bild ohne Bewegungsunschärfe erleben
Letzte Aktualisierung am 18.11.2024 / Affiliate Links / Bilder von der Amazon Product Advertising API – Als Amazon-Partner verdiene ich an qualifizierten Käufen.
Abgestürzten Dienst einmalig beenden
Sollte es sich um ein einmaliges Problem handeln, könnt ihr den Dienst einfach über CMD mit Adminrechten und folgendem Befehl beenden.
Taskkill /PID 3020 /F
Die entsprechende PID müsst ihr natürlich ersetzen. Sie ändert sich bei jedem Start des Dienstes. Mit dem Schalter /F wird das Beenden erzwungen.
Dienst im Status „Wird beendet“ automatisch neu starten per Script
Sollte ein Dienst öfter als einmal im Status „Wird beendet“ hängen bleiben, könnt ihr Taskkill mittels eines Batchscripts und der Windows Aufgabenplanung automatisch ausführen lassen. Ich verwende dazu folgendes Script:
set Status=NichtVohanden
for /f „tokens=4“ %%b in (’sc query DavidTLD002 ^|find „STATE „‚) do set Status=%%b
echo [Debug] Status: %Status%
if /i „%Status%“ == „STOP_PENDING“ (taskkill /F /IM tld.exe net start DavidTLD002)
if /i „%Status%“ == „STOPPED“ net start DavidTLD002
if /i „%Status%“ == „NichtVorhanden“ (
echo Da hat etwas nicht geklappt
)
Anpassen müsst ihr lediglich den Dienstnamen und die zugehörige EXE-Datei. Die EXE-Datei vom Dienst findet ihr ebenfalls bei den Diensten unter Rechtsklick – Eigenschaften.
Das Script liest den Status des Dienstes aus und führt dann je nach Status verschiedene Bedingungen aus. In meinem Beispiel wird der Dienst im Status STOP_PENDING via Taskkill beendet und anschließend wieder gestartet. Ist der Status STOPPED, wird der Dienst einfach nur gestartet. Das Script könnt ihr für jede Art von Status anpassen und somit kinderleicht einen abgestürzten Dienst automatisch beenden und wieder neu starten.
Das fertige Script könnt ihr nun mit Hilfe der Aufgabenplanung automatisch in einem gewissen Intervall laufen lassen. Je nachdem wie kritisch der Dienst ist, umso kürzer sollte der Intervall sein. In meinem Fall habe ich das Script alle 5 Minuten laufen lassen.