Halt Batch-Datei bis zum Service Stopp abgeschlossen ist?
-
03-10-2019 - |
Frage
Ich verwende eine Batch-Datei einen Windows-Dienst zu beenden. Ich bin mit dem sc
Befehl, aber ich bin für andere Ideen offen, die Frage weiter unten. Das Problem ist, dass der Batch-Datei Erlös , während der Dienst stoppen (das stop
Argument sc
scheint nur zu Anfrage der Anschlag - es funktioniert nicht warten für den Anschlag).
Wie kann ich die Batch-Datei ändern, um nicht fortfahren , bis der Anschlag vollständig
Lösung
Mit NET stop
verwenden kann, die synchron ist, das heißt es wird warten, bis der Dienst beendet wird.
Siehe - NET stop
Andere Tipps
sc stop webdriveservice
:loop
sc query webdriveservice | find "STOPPED"
if errorlevel 1 (
timeout 1
goto loop
)
Wie bereits erwähnt, wird NET STOP einen Stoppbefehl an den Dienst senden, aber, wenn der Dienst mehr als eine bestimmte Zeit in Anspruch nimmt (20 Sekunden oder so ist meine Beobachtung), wird NET STOP für den Dienst wartet nicht aufhören, um tatsächlich vor der Rückkehr.
Um die Batch-Datei tatsächlich anhalten, bis der Dienst beendet wird, müssen Sie wie die in diesen Themen skizziert einen Ansatz verwenden:
Stoppen / Starten ein Remote-Windows-Dienst und wartet, dass es
zum öffnen / schließen Ich glaube, net stop [Service]
warten sollte, bis der Dienst, bevor sie vollständig zum Stillstand gekommen ist. sc stop [Service]
sendet einfach eine „stop“ Nachricht an den Dienst.
Das ist ein bisschen grob, aber es funktionierte für mich, um sicherzustellen, dass ich eine tägliche Batch-Datei planen könnte, um im wesentlichen einen Dienst neu starten.
NET STOP [Service]
: TryAgain
TIMEOUT / T 10 / NOBREAK
NET START [Service]
IF% ERRORLEVEL% NEQ 0 GOTO TryAgain
Ich weiß, Schnipsel mit diesem Code, dass diese in einer Endlosschleife führen kann, wenn der Dienst nicht erfolgreich gestartet werden sollte. Ich wollte nur im Grunde zeigen, wie das Problem zu umgehen, TIMEOUT verwenden, wo ein Dienst länger dauern kann, zu stoppen, als der NET STOP-Befehl erlaubt.
Mit dem &&
Symbol zwischen den Befehlen. Das &&
Symbol wartet der vorherige Befehl, bevor zum nächsten Befehl beenden gehen.
Alle Befehle in der gleichen Befehlszeile sein muss. Sie können beliebig viele Befehle verwenden Sie in einer Reihe möchten.
können Sie verwenden auch die pause
Befehl. Damit fragt eine beliebige Taste drücken, bevor zum nächsten Vorgang fortzufahren.
Zum Beispiel:
sc qdescription "MyServiceName" && echo. && sc stop "MyServiceName" && echo. && echo [ "MyServiceName" service stopped ] && echo. && pause