ฉันมีสคริปต์ชุดที่ดูเหมือนว่า:
sc stop myservice
sc start myservice
มันเกิดข้อผิดพลาดเนื่องจาก sc ไม่รอจนกระทั่งบริการหยุดทำงาน ฉันจะเริ่มบริการด้วยสคริปต์ได้อย่างไร
ฉันมีสคริปต์ชุดที่ดูเหมือนว่า:
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
อาจจะหายไปบางสิ่งบางอย่าง แต่ฉันใช้มันตลอดเวลา:
net stop "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"
เทคนิคนี้เป็นวิธีแก้ปัญหาทั่วไปที่สามารถใช้กับคำสั่งใด ๆ
sc stop myservice
จะเพิ่งส่งคำสั่งหยุดและกลับก่อนที่บริการจะหยุด โทร sc กับ start / b จะไม่ช่วย
หากต้องการให้เริ่มบริการบางอย่างอย่างเงียบๆ ซึ่งขอให้ยืนยันการหยุด (เช่นบริการเซิร์ฟเวอร์เป็นต้น) คุณสามารถเพิ่ม/ yไปยังคำสั่ง end of stop
net stop Server /y
net start Server
มันจะมีประโยชน์สำหรับการเรียกใช้สคริปต์อัตโนมัติ
หากคุณต้องการเริ่มบริการที่ล้มเหลวคุณไม่จำเป็นต้องเรียกใช้สคริปต์ ในบริการ MMC snapin คลิกขวาที่บริการเลือกคุณสมบัติคลิกแท็บการกู้คืน ที่นี่คุณสามารถตั้งค่าการกระทำที่คุณต้องการหากบริการหยุด มีความยืดหยุ่นมาก คุณจะต้องมีสคริปต์หากคุณพยายามหยุดบริการทำสิ่งใดสิ่งหนึ่งแล้วเริ่มสคริปต์นำหน้าชุดไฟล์ด้วย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>