次のようなバッチスクリプトがあります。
sc stop myservice
sc start myservice
scはサービスが停止するまで待機しないため、エラーになります。スクリプトを使用してサービスを再起動するにはどうすればよいですか?
投稿者は、サービスを再起動する前に、サービスが停止していることを確認したいと考えています。 "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
何か不足しているかもしれませんが、私はいつもこれを使用しています:
ネットストップ「myservice」
net start "myservice"
以下:
net stop "myservice" && net start "myservice"
Powershellで非常にシンプル:
PS >Restart-Service MySrvcHere
さらに良いことに、表示名を使用します。
PS >Restart-Service -displayname "My Service Name Here"
Get-Help Restart-Service
多くのための
単にサービスを再起動するためのものである場合は、
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"
この手法は、あらゆるコマンドに適用できるより一般的なソリューションです。
quietを停止して確認を求めるサービスの再起動(たとえば、サーバーサービスとして)を行うには、停止コマンドの最後に/ yを追加します。
net stop Server /y
net start Server
自動スクリプト実行に役立ちます。
失敗したサービスを再起動する場合は、スクリプトを実行する必要はありません。サービスで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
次のコマンドを使用できます。
@echo off
sc Stop <Name of Agentry Service Here>
timeout 30
sc start <Name of Agentry Service Here>