Halt file batch fino alla fermata di servizio è completo?
-
03-10-2019 - |
Domanda
Io sto usando un file batch per arrestare un servizio di Windows. Sto usando il comando sc
, ma sono aperto ad altre idee, data la domanda qui sotto. Il problema è che i proventi dei file batch , mentre il servizio si ferma (l'argomento stop
a sc
sembra solo di richiesta ??em> fermata - non wait per l'arresto).
Come faccio a modificare il file batch per non procedere , fino alla fermata è completa ??em>
Soluzione
L'uso può utilizzare NET stop
, che è sincrona, cioè si attenderà fino a quando il servizio viene arrestato.
See - net stop
Altri suggerimenti
sc stop webdriveservice
:loop
sc query webdriveservice | find "STOPPED"
if errorlevel 1 (
timeout 1
goto loop
)
Come accennato in precedenza, NET STOP invierà un comando di arresto al servizio, ma, se il servizio richiede più di un certo periodo di tempo (20 secondi o giù di lì è la mia osservazione), NET STOP non aspetterà il servizio in realtà fermata prima di tornare.
Per mettere in pausa in realtà il file batch fino a quando il servizio viene arrestato, è necessario utilizzare un approccio come quelle descritte in queste discussioni:
Arresto / Avvio un servizio di Windows remoto e in attesa di esso per aprire / chiudere
Credo net stop [Service]
deve attendere fino a quando il servizio è completamente arrestato prima di passare. sc stop [Service]
invia semplicemente un messaggio di "stop" al servizio.
Questo è un po 'grezzo, ma ha funzionato per me, al fine di garantire che ho potuto pianificare un file batch ogni giorno a essenzialmente riavviare un servizio.
NET STOP [Servizio]
: tryagain
Timeout / T 10 / NOBREAK
NET START [Servizio]
Se% ERRORLEVEL% NEQ 0 GOTO tryagain
Mi rendo conto che con questo frammento di codice che questo potrebbe comportare un ciclo infinito se il servizio è stato quello di non avviare correttamente. Volevo solo mostrare fondamentalmente come aggirare il problema utilizzando TIMEOUT in cui un servizio può richiedere più tempo di arresto di quello che il comando NET STOP permette.
Usa il simbolo &&
tra i comandi. Le attese simbolo &&
per finire il comando precedente prima di procedere al comando successivo.
Tutti i comandi devono essere alla stessa riga di comando. È possibile utilizzare il maggior numero di comandi che si desidera in una riga.
È possibile utilizzare anche il comando pause
. Con questo, chiede di premere un tasto, prima di procedere alla successiva procedura.
Ad esempio:
sc qdescription "MyServiceName" && echo. && sc stop "MyServiceName" && echo. && echo [ "MyServiceName" service stopped ] && echo. && pause