43 votos

¿Cómo puedo reiniciar un servicio de Windows desde un script?

Tengo un batch script que parece:

sc stop myservice
sc start myservice

da error porque sc no espera a que se detenga el servicio. ¿Cómo puedo reiniciar un servicio con un script?

0 votos

¿Qué pasa con este ?

54voto

crb Puntos 6399

El cartel quiere asegurarse de que el servicio está parado antes de intentar reiniciarlo. Puede utilizar un bucle en la salida de "sc query" haciendo algo como esto:

:stop
sc stop myservice

rem cause a ~10 second sleep before checking the service state
ping 127.0.0.1 -n 10 -w 1000 > nul

sc query myservice | find /I "STATE" | find "STOPPED"
if errorlevel 1 goto :stop
goto :start

:start
net start | find /i "My Service">nul && goto :start
sc start myservice

11 votos

Buen uso del ping como retardo de tiempo.

0 votos

Gracias, no hay sueño en el lote por lo que es todo lo que puede hacer para esperar :)

4 votos

+1, y una insignia GOTO. Se concede a aquellos que utilizan una declaración GOTO con cara de circunstancias.

31voto

Traphicone Puntos 64

Puede que se me escape algo, pero lo uso todo el tiempo:

net stop "myservice"
net start "myservice"

o más corto:

net stop "myservice" && net start "myservice"

25voto

Greg Hewgill Puntos 356191

Muy simple con powershell:

PS >Restart-Service MySrvcHere

Mejor aún, utilizando nombres de pantalla:

PS >Restart-Service -displayname "My Service Name Here"

Get-Help Restart-Service para más

6voto

Omer van Kloeten Puntos 6268

Si es puramente para reiniciar el servicio, puede utilizar

Net stop myservice
Net start myservice

Sin embargo, si quiere acceder a las opciones de sc, puede utilizar el comando start /wait

start /B /WAIT CMD /C "sc stop myservice"
start /B /WAIT CMD /C "sc start myservice"

esta técnica es una solución más general que puede aplicarse a cualquier comando.

1 votos

sc stop myservice sólo enviará el comando de parada y regresará antes de que el servicio se detenga. Llamar a sc con start /b no ayudará.

5voto

Fedir Puntos 254

Para tener tranquilo reinicio de algún servicio, que pide confirmaciones para ser detenido (como el servicio de servidor, por ejemplo), se podría añadir /y al final del comando de parada.

net stop Server /y
net start Server

Sería útil para la ejecución automática de script.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X