스크립트에서 Windows 서비스를 다시 시작하려면 어떻게합니까?


38

다음과 같은 배치 스크립트가 있습니다.

sc stop myservice
sc start myservice

sc가 서비스가 중지 될 때까지 기다리지 않기 때문에 오류가 발생합니다. 스크립트를 사용하여 서비스를 다시 시작하려면 어떻게합니까?


대해 ?
pQd

답변:


47

포스터는 서비스를 다시 시작하기 전에 서비스가 중지되었는지 확인하려고합니다. "sc query"출력에 루프를 사용하여 다음과 같은 작업을 수행 할 수 있습니다.

: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

8
시간 지연으로 핑을 잘 사용합니다.
David Yu

고마워, 일괄 수면이 없으므로 기다릴 수있는 모든 것 :)
crb

4
+1 및 GOTO 배지. 똑바로 얼굴을 가진 GOTO 문을 사용하는 사람들에게 수여.
Joseph Kern

배치가 do / while 루프를 지원한다면 C #에서는 사소합니다.
crb

3
Windows Server 2008에서 오류 수준은 0 이면 발견 되지 않으면 1 입니다. 그래서 나는 논리를 뒤집어 야했고 효과가있었습니다.
Kirk Woll

26

뭔가 빠졌을 수도 있지만 항상 이것을 사용합니다.

net stop "myservice"
net 시작 "myservice"

또는 더 짧은 :

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


24

Powershell로 간단하게 죽기 :

PS >Restart-Service MySrvcHere

표시 이름을 사용하는 것이 더 좋습니다.

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

Get-Help Restart-Service 이상


6

순전히 서비스를 다시 시작하기위한 것이라면

Net stop myservice
Net start myservice

그러나 sc 옵션에 액세스하려면 start / wait 명령을 사용할 수 있습니다

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

이 기술은 모든 명령에 적용 할 수있는보다 일반적인 솔루션입니다.


sc stop myservice서비스가 중지되기 전에 중지 명령을 보내고 반환합니다. start / b를 사용하여 sc를 호출해도 도움이되지 않습니다.
Jürgen Steinblock

5

이려면 조용한 (예를 들어, 서버 서비스로) 중지하는 확인서를 요구 일부 서비스의 다시 시작, 당신은 추가 할 수 / Y를 정지 명령의 끝에.

net stop Server /y
net start Server

자동 스크립트 실행에 도움이됩니다.


3

실패한 서비스를 다시 시작하려면 스크립트를 실행할 필요가 없습니다. 서비스 MMC 스냅인에서 서비스를 마우스 오른쪽 버튼으로 클릭하고 속성을 선택한 다음 복구 탭을 클릭하십시오. 여기에서 서비스를 중지 할 작업을 설정할 수 있습니다. 사용 가능한 유연성이 많이 있습니다. 서비스를 중지하려는 경우 스크립트가 필요합니다. 무언가를 한 다음 스크립트를 시작하고 배치 파일을 시작 net stop "myserviceshortname"하고 끝으로 끝내십시오.net start "myserviceshortname"

vbscipt에서는 서비스와 그 종속자를 중지시키는 코드가 조금 더 있습니다.

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colServiceList = objWMIService.ExecQuery("Associators of " _
   & "{Win32_Service.Name='myservice'} Where " _
        & "AssocClass=Win32_DependentService " & "Role=Antecedent" )
For each objService in colServiceList
    objService.StopService()
Next
Wscript.Sleep 20000
Set colServiceList = objWMIService.ExecQuery _
        ("Select * from Win32_Service where Name='myservice'")
For each objService in colServiceList
    errReturn = objService.StopService()
Next

여기에 서비스를 시작하고 그것이 의존하는 모든 것이 있습니다 (이것은 익숙해야 함)

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colServiceList = objWMIService.ExecQuery _
    ("Select * from Win32_Service where Name='Myservice'")
For each objService in colServiceList
    errReturn = objService.StartService()
Next
Wscript.Sleep 20000
Set colServiceList = objWMIService.ExecQuery("Associators of " _
   & "{Win32_Service.Name='myservice'} Where " _
        & "AssocClass=Win32_DependentService " & "Role=Dependent" )
For each objService in colServiceList
    objService.StartService()
Next

1

다음 명령을 사용할 수 있습니다.

@echo off
sc Stop <Name of Agentry Service Here>
timeout 30
sc start <Name of Agentry Service Here>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.