2008-09-25 12 views
246

मैं एक बल्ले या cmd को कैसे रोक सकता हूं और त्रुटि जांच के साथ भरोसेमंद सेवा शुरू कर सकता हूं (या मुझे बताएं कि यह किसी भी कारण से सफल नहीं था)?बैच या cmd फ़ाइल के माध्यम से एक सेवा रोकें और शुरू करें?

+0

शायद कुछ हद तक ऑफटॉप (क्योंकि आप बल्ले और सीएमडी निर्देश के लिए पूछते हैं) लेकिन: ** पावरशेल ** आपको इस तरह के कार्यों के लिए बहुत अधिक नियंत्रण और प्रतिक्रिया देता है। – GvS

उत्तर

309

उपयोग SC (सेवा नियंत्रण) आदेश, तो यह आपको सिर्फ start & stop तुलना में बहुत अधिक विकल्प देता है।

 
    DESCRIPTION: 
      SC is a command line program used for communicating with the 
      NT Service Controller and services. 
    USAGE: 
     sc <server> [command] [service name] ... 

     The option <server> has the form "\\ServerName" 
     Further help on commands can be obtained by typing: "sc [command]" 
     Commands: 
     query-----------Queries the status for a service, or 
         enumerates the status for types of services. 
     queryex---------Queries the extended status for a service, or 
         enumerates the status for types of services. 
     start-----------Starts a service. 
     pause-----------Sends a PAUSE control request to a service. 
     interrogate-----Sends an INTERROGATE control request to a service. 
     continue--------Sends a CONTINUE control request to a service. 
     stop------------Sends a STOP request to a service. 
     config----------Changes the configuration of a service (persistant). 
     description-----Changes the description of a service. 
     failure---------Changes the actions taken by a service upon failure. 
     qc--------------Queries the configuration information for a service. 
     qdescription----Queries the description for a service. 
     qfailure--------Queries the actions taken by a service upon failure. 
     delete----------Deletes a service (from the registry). 
     create----------Creates a service. (adds it to the registry). 
     control---------Sends a control to a service. 
     sdshow----------Displays a service's security descriptor. 
     sdset-----------Sets a service's security descriptor. 
     GetDisplayName--Gets the DisplayName for a service. 
     GetKeyName------Gets the ServiceKeyName for a service. 
     EnumDepend------Enumerates Service Dependencies. 

     The following commands don't require a service name: 
     sc <server> <command> <option> 
     boot------------(ok | bad) Indicates whether the last boot should 
         be saved as the last-known-good boot configuration 
     Lock------------Locks the Service Database 
     QueryLock-------Queries the LockStatus for the SCManager Database 
    EXAMPLE: 
      sc start MyService 
+7

कि स्क्रीन डंप ने अभी पुरस्कार जीता है! धन्यवाद, मुझे 'एससी' के बारे में भी पता नहीं था !!! – Keng

+1

मैं मानता हूं कि यह नेट स्टार्ट/स्टॉप से ​​बेहतर है। ध्यान दें कि रिमोट मशीनों पर भी सेवाओं को छूने का विकल्प है। –

+1

ग्रेट उत्तर। लेकिन आपको 'एससी स्टार्ट सेवा' चलाने के लिए व्यवस्थापक बनने की जरूरत है। मुझे इसके लिए एक समाधान मिला [यहां] (http://superuser.com/questions/419194/is-there-a-way-to-allow- मानक-users-to-restart-stop-start-the-print- स्पूलर)। (स्वीकार्य उत्तर में समाधान होता है) –

6

net start और net stop से रिटर्न कोड का उपयोग करना मेरे लिए सबसे अच्छी विधि जैसा प्रतीत होता है। इसे देखने का प्रयास करें: Net Start return codes

+1

लिंक किया गया पृष्ठ अब मौजूद नहीं है। इस प्रकार, यह अब एक टिप्पणी है। – Neolisk

172
net start [serviceName] 

और

net stop [serviceName] 

आपको बता कि क्या वे सफल हो गए या बहुत स्पष्ट रूप से विफल रहे हैं। उदाहरण के लिए

U:\>net stop alerter 
The Alerter service is not started. 

More help is available by typing NET HELPMSG 3521. 

यदि बैच फ़ाइल से चल रहा है, तो आपके पास रिटर्न कोड के ERRORLEVEL तक पहुंच है। 0 सफलता इंगित करता है। कुछ भी उच्च विफलता इंगित करता है।

एक बल्ला फ़ाइल के रूप में, error.bat:

@echo off 
net stop alerter 
if ERRORLEVEL 1 goto error 
exit 
:error 
echo There was a problem 
pause 

उत्पादन इस तरह दिखता है:

U:\>error.bat 
The Alerter service is not started. 

More help is available by typing NET HELPMSG 3521. 

There was a problem 
Press any key to continue . . . 

वापसी कोड

- 0 = Success 
- 1 = Not Supported 
- 2 = Access Denied 
- 3 = Dependent Services Running 
- 4 = Invalid Service Control 
- 5 = Service Cannot Accept Control 
- 6 = Service Not Active 
- 7 = Service Request Timeout 
- 8 = Unknown Failure 
- 9 = Path Not Found 
- 10 = Service Already Running 
- 11 = Service Database Locked 
- 12 = Service Dependency Deleted 
- 13 = Service Dependency Failure 
- 14 = Service Disabled 
- 15 = Service Logon Failure 
- 16 = Service Marked For Deletion 
- 17 = Service No Thread 
- 18 = Status Circular Dependency 
- 19 = Status Duplicate Name 
- 20 = Status Invalid Name 
- 21 = Status Invalid Parameter 
- 22 = Status Invalid Service Account 
- 23 = Status Service Exists 
- 24 = Service Already Paused 

20.04.2015 संपादित

वापसी कोड:

The NET command does not return the documented Win32_Service class return codes (Service Not Active,Service Request Timeout, etc) and for many errors will simply return Errorlevel 2.

यहाँ देखो: http://ss64.com/nt/net_service.html

+8

यह उत्तर हमें और देखना चाहिए! अच्छा काम। – Pokus

+2

मेरा सभी नहीं - वापसी कोड एक समुदाय संपादन से आया ... –

+2

वैसे यह एक अच्छी प्रतिक्रिया है। बहुत बहुत धन्यवाद। –

26

आप नेट स्टार्ट आदेश का उपयोग कर सकते हैं और फिर ERRORLEVEL वातावरण चर की जाँच करता है, उदा

net start [your service] 
if %errorlevel% == 2 echo Could not start service. 
if %errorlevel% == 0 echo Service started successfully. 
echo Errorlevel: %errorlevel% 

अस्वीकरण: मैंने इसे अपने सिर के शीर्ष से लिखा है, लेकिन मुझे लगता है कि यह काम करेगा।

+0

यह मेरे लिए काम करता है, धन्यवाद @ जोनास – MikeRoger

1

SC सेवाओं के साथ सब कुछ कर सकते हैं ... शुरू, बंद करो, जाँच, कॉन्फ़िगर करें, और अधिक ...

3

या आप इस cmd साथ दूरस्थ सेवा शुरू कर सकते हैं: के बजाय sc \\<computer> start <service>

7

कोड की जाँच, यह भी काम करता है

net start "Apache tomcat" || goto ExitError 

:End 
exit 0 

:ExitError 
echo An error has occurred while starting the tomcat services 
exit 1 
5

सिंटेक्स हमेशा मुझे हो जाता है .... इसलिए ...

यहां स्पष्ट रूप से एक बैच फ़ाइल में एक लाइन जोड़ने के लिए है जो रिमोट सेवा (किसी अन्य मशीन पर) को मार देगा यदि आप दोनों मशीनों पर व्यवस्थापक हैं, तो व्यवस्थापक के रूप में .bat चलाएं, और मशीनें एक ही डोमेन पर हैं ।मशीन नाम यूएनसी प्रारूप \ MyServer

sc \\ip.ip.ip.ip stop p4_1 

इस मामले में इस प्रकार है ... p4_1 था दोनों सेवा नाम और प्रदर्शन नाम, आप सेवा प्रबंधक में सेवा के लिए गुण देखने जब। आपको सेवा का नाम उपयोग करना होगा।

आपकी सेवा ओपीएस जंकियों के लिए ... अपने कारण कोड और टिप्पणी को जोड़ना सुनिश्चित करें! उदाहरण के लिए '4' जो बराबर 'की योजना बनाई' और टिप्पणी 'को रोक रहा है सर्वर रखरखाव के लिए'

sc \\ip.ip.ip.ip stop p4_1 4 Stopping server for maintenance 
+1

यदि मैं लॉग ऑन करने के लिए किसी अन्य उपयोगकर्ता आईडी और पासवर्ड का उपयोग करने की आवश्यकता है तो मैं यह कैसे कर सकता हूं? – Frantumn

+1

'रनस/उपयोगकर्ता: डोमेन \ उपयोगकर्ता नाम cmd' करके आप अन्य उपयोगकर्ता/आईडी के रूप में' सीएमडी 'चलाते हैं तो अपना पासवर्ड दर्ज करें। सीएमडी निर्दिष्ट उपयोगकर्ता खाते के रूप में चलना शुरू कर देगा। – user4317867

4

हम को लगता है कि "शुद्ध रोक" सेवा बंद हो जाएगा चाहते हैं। अफसोस की बात है, वास्तविकता काले और सफेद नहीं है। अगर सेवा को रोकने में लंबा समय लगता है, तो सेवा बंद होने से पहले आदेश वापस आ जाएगा। हालांकि, आप तब तक नहीं जान पाएंगे जब तक कि आप त्रुटि को जांच नहीं लेते।

यह समाधान लूप के चारों ओर एक विराम के साथ, सेवा बंद होने तक सेवा की स्थिति की तलाश में लूप दौर के रूप में प्रतीत होता है।

लेकिन तब फिर से ...

मैं पहली बार सेवा दिखाई दे रही है को रोकने के लिए एक लंबे समय ले, तो बाद में एक सेवा के लिए "शुद्ध रोक" बस कुछ नहीं कर प्रतीत होता है। सेवा प्रबंधक में सेवा देखें, और इसकी स्थिति अभी भी "प्रारंभ" है - "रोकना" में कोई बदलाव नहीं है। फिर भी मैं एससीएम का उपयोग करके मैन्युअल रूप से इस दूसरी सेवा को रोक सकता हूं, और यह 3 या 4 सेकंड में बंद हो जाता है।

5

मैंने इसके लिए अपनी निजी बैच फ़ाइल बनाई है, मेरा थोड़ा अलग है लेकिन आप फिट बैठते समय संशोधित करने के लिए स्वतंत्र महसूस करते हैं। मैंने इसे थोड़ी देर पहले बनाया क्योंकि मैं ऊब गया था और लोगों को अंत करने, शुरू करने, रोकने या ऑटो पर सेट करने में सक्षम होने का एक आसान तरीका बनाना चाहता था। यह बीएटी फ़ाइल बस अनुरोध करती है कि आप सेवा का नाम इनपुट करें और यह आपके लिए बाकी करेगी। मुझे एहसास नहीं हुआ कि वह किसी ऐसी चीज की तलाश में था जिसने कोई त्रुटि कहा, मैंने उस हिस्से को गलत तरीके से पढ़ा होगा। हालांकि आमतौर पर यह लाइन के अंत में >> output.txt इनपुट करके किया जा सकता है।

% var% उपयोगकर्ता के लिए अपनी सेवा को इनपुट करने में सक्षम होने का एक तरीका है, हर बार जब आप एक अलग सेवा शुरू करना/बंद करना चाहते हैं तो बैट फ़ाइल को संशोधित करने के बजाय।

यदि मैं गलत हूं, तो कोई भी इस पर मुझे सही करने के लिए स्वतंत्र महसूस कर सकता है।

@echo off 
set /p c= Would you like to start a service [Y/N]? 
    if /I "%c%" EQU "Y" goto :1 
    if /I "%c%" EQU "N" goto :2 
    :1 
    set /p var= Service name: 
:2 
set /p c= Would you like to stop a service [Y/N]? 
    if /I "%c%" EQU "Y" goto :3 
    if /I "%c%" EQU "N" goto :4 
    :3 
    set /p var1= Service name: 
:4 
set /p c= Would you like to disable a service [Y/N]? 
    if /I "%c%" EQU "Y" goto :5 
    if /I "%c%" EQU "N" goto :6 
    :5 
    set /p var2= Service name: 
:6 
set /p c= Would you like to set a service to auto [Y/N]? 
    if /I "%c%" EQU "Y" goto :7 
    if /I "%c%" EQU "N" goto :10 
    :7 
    set /p var3= Service name: 
:10 
sc start %var% 
sc stop %var1% 
sc config %var2% start=disabled 
sc config %var3% start=auto 
+1

आमतौर पर, कोड केवल उत्तर की सराहना नहीं की जाती है। क्या आप अपने समाधान पर विस्तार कर सकते हैं या कुछ व्याख्यात्मक टिप्पणियां जोड़ सकते हैं? –

+1

मैंने इसे थोड़ी देर पहले बनाया क्योंकि मैं ऊब गया था और लोगों को अंत करने, शुरू करने, रोकने या ऑटो पर सेट करने में सक्षम होने का एक आसान तरीका बनाना चाहता था। यह बीएटी फ़ाइल बस अनुरोध करती है कि आप सेवा का नाम इनपुट करें और यह आपके लिए बाकी करेगी। –

2

मैंने अभी यूनास के उदाहरण का उपयोग किया और 0 से 24 त्रुटि के पूर्ण सूची बनाई। अन्य पोस्ट सही है कि net start और net stop सफलता के लिए केवल errorlevel 0 और विफलता के लिए 2 का उपयोग करें।

लेकिन यह क्या मेरे लिए काम किया है:

net stop postgresql-9.1 
if %errorlevel% == 2 echo Access Denied - Could not stop service 
if %errorlevel% == 0 echo Service stopped successfully 
echo Errorlevel: %errorlevel% 

बदलें start करने के लिए stop और रिवर्स में काम करता है।

1

मैन्युअल सेवा पुनरारंभ ठीक है - services.msc में "पुनरारंभ करें" बटन है, लेकिन कमांड लाइन में दोनों स्कैन और नेट कमांडों में "पुनरारंभ" स्विच की कमी होती है और अगर पुनरारंभ cmd/bat फ़ाइल में निर्धारित होता है, तो सेवा बंद हो जाती है और शुरू होती है तुरंत, कभी-कभी यह एक त्रुटि हो जाती है क्योंकि सेवा अभी तक बंद नहीं है, इसे चीजों को बंद करने के लिए कुछ समय चाहिए।

यह कोई त्रुटि उत्पन्न हो सकता है: अनुसूचित जाति रोक अनुसूचित जाति शुरू

यह टाइमआउट डालने के लिए एक अच्छा विचार है, मैं पिंग का उपयोग करें (यह हर 1 सेकंड पिंग्स): अनुसूचित जाति रोक पिंग स्थानीय होस्ट -n 60 एससी शुरू