Назад | Перейти на главную страницу

Удаленный перезапуск службы Windows (остановка / запуск только в том случае, если она уже запущена)

В настоящее время я использую следующий файл BAT для перезапуска удаленной службы:

sc \\MyServer stop MyRemoteService
sc \\MyServer start MyRemoteService

Это отлично работает для одного компьютера, но я хочу использовать его для перезапуска служб в ферме. Я мог бы просто перечислить все серверы в своем пакетном файле, но я хочу перезапустить службы, только если они уже запущены. Например, если служба работает на одном сервере в ферме, перезапустите ее, но если она еще не запущена, оставьте ее остановленной.

Есть ли способ сделать это удаленно? Я не женат на SC, есть другая программа, которая это делает.

Такой грязный ответ на вопрос меня развеселил :)

sc \\MyServer query MyRemoteService | find "RUNNING" && echo Service running - now stopping && sc \\MyServer stop MyRemoteService && ping 127.0.0.1 -n 10 && echo Now starting service && sc \\MyServer start MyRemoteService || echo Service not running

Это немного более подробный ответ, чем ответ Иззи, но допускает более длительный срок службы в состоянии «STOP_PENDING».

Предположим, что серверы находятся в текстовом файле, указанном в командной строке, в формате:

SERVERNAME1
SERVERNAME2
...

И сценарий:

@echo off
set SVC=ServiceName
if "%1"=="" goto end

for /f %%i in (%1) do call :do_bounce %%i
goto end

:do_bounce
rem Query for service running and bail if not
sc \\%1 query %SVC% | find "RUNNING"
if errorlevel 1 goto end

rem Stop the service and loop checking for it to stop
sc \\%1 stop %SVC%
:check_stopped
ping 127.0.0.1 -n 2 >NUL 2>NUL
sc \\%1 query %SVC% | find "STOPPED"
if errorlevel 1 goto check_stopped

rem Restart the service
sc \\%1 start %SVC%

:end

Powershell 2.0 имеет командлет Restart-Service

Вы можете захотеть проверить этот вопрос на StackOverflow.

В нем упоминается, почему вы можете захотеть провести мониторинг с каждой отдельной машины (с помощью инструмента мониторинга служб Windows), а не полагаться на сеть.