मैं स्क्रिप्ट से विंडोज सेवा को कैसे पुनः आरंभ करूं?


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
समय की देरी के रूप में पिंग का अच्छा उपयोग।
डेविड यू

धन्यवाद, बैच में नींद नहीं है, इसलिए आप सभी को इंतजार करना पड़ सकता है :)
crb

4
+1, और एक गोटो बिल्ला। उन लोगों को सम्मानित किया गया जो सीधे चेहरे के साथ गोटो बयान का उपयोग करते हैं।
जोसेफ केर्न

यदि केवल बैच ने समर्थन किया / जबकि छोरों ... यह सी # में तुच्छ है, वास्तव में!
crb

3
विंडोज सर्वर 2008 में, त्रुटि स्तर 0 पाया गया है और 1 जब नहीं मिला है। इसलिए मुझे तर्क को उलटना पड़ा और फिर यह काम कर गया।
Kirk Woll

26

कुछ याद आ सकता है, लेकिन मैं हर समय इसका उपयोग करता हूं:

नेट स्टॉप "myservice"
नेट स्टार्ट "myservice"

या इससे कम:

नेट स्टॉप "myservice" और& net प्रारंभ "myservice"


24

शक्तियों के साथ मृत सरल:

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बस स्टॉप कमांड भेजेगा और सेवा बंद होने से पहले वापस आ जाएगा। स्टार्ट / b के साथ sc को कॉल करने से मदद नहीं मिलेगी।
जुरगेन स्टीनब्लॉक

5

करवाने के लिए शांत कुछ सेवा है, जो (, सर्वर सेवा के रूप में उदाहरण के लिए) की पुष्टि पूछता रोका जा के पुनः आरंभ, आप जोड़ सकते हैं y / स्टॉप कमांड के अंत में।

net stop Server /y
net start Server

यह स्वचालित स्क्रिप्ट निष्पादन के लिए सहायक होगा।


3

यदि आप एक विफल सेवा को पुनरारंभ करना चाहते हैं, तो आपको स्क्रिप्ट चलाने की आवश्यकता नहीं है। सेवाओं में एमएमसी स्नैपइन एक सेवा पर राइट क्लिक करें, गुणों का चयन करें, रिकवरी टैब पर क्लिक करें। यहां आप यह निर्धारित कर सकते हैं कि आपके द्वारा की जाने वाली कार्रवाइयां सेवा बंद होनी चाहिए। वहाँ लचीलापन का एक बहुत कुछ उपलब्ध है। आपको एक स्क्रिप्ट की आवश्यकता होगी यदि y ou सेवा को रोकने की कोशिश कर रहे हैं, तो कुछ करें फिर स्क्रिप्ट शुरू करें, बैच फ़ाइल को पहले 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>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.