मैं त्रुटि की जाँच के साथ मज़बूती से सेवा को रोकने और शुरू करने के लिए एक बल्ले या सीएमडी को कैसे स्क्रिप्ट कर सकता हूं (या मुझे बताएं कि यह किसी भी कारण से सफल नहीं था)?
मैं त्रुटि की जाँच के साथ मज़बूती से सेवा को रोकने और शुरू करने के लिए एक बल्ले या सीएमडी को कैसे स्क्रिप्ट कर सकता हूं (या मुझे बताएं कि यह किसी भी कारण से सफल नहीं था)?
जवाबों:
SC
(सेवा नियंत्रण) कमांड का उपयोग करें , यह आपको बस start
और अधिक विकल्प देता है stop
।
विवरण: SC एक कमांड लाइन प्रोग्राम है जिसका उपयोग संचार के लिए किया जाता है NT सेवा नियंत्रक और सेवाएं। उपयोग: sc <server> [कमांड] [सेवा का नाम] ... विकल्प <सर्वर> में "\\ ServerName" रूप है कमांड पर आगे की सहायता टाइपिंग द्वारा प्राप्त की जा सकती है: "sc [कमांड]" आदेश: क्वेरी ----------- किसी सेवा के लिए स्थिति को क्वेरी करता है, या सेवाओं की प्रकारों के लिए स्थिति की गणना करता है। queryex --------- किसी सेवा के लिए विस्तारित स्थिति का प्रश्न, या सेवाओं की प्रकारों के लिए स्थिति की गणना करता है। start ----------- एक सेवा शुरू करता है। रोकें ----------- सेवा के लिए एक PAUSE नियंत्रण अनुरोध भेजता है। पूछताछ ----- एक सेवा के लिए एक अंतर्राज्यीय नियंत्रण अनुरोध भेजता है। जारी रखें -------- एक सेवा के लिए एक नियंत्रण नियंत्रण अनुरोध भेजता है। stop ------------ एक सेवा के लिए एक STOP अनुरोध भेजता है। config ---------- किसी सेवा का विन्यास (लगातार) बदलता है। विवरण ----- किसी सेवा का विवरण बदलता है। विफलता --------- किसी सेवा द्वारा विफलता पर किए गए कार्यों को बदल देती है। qc -------------- किसी सेवा के लिए कॉन्फ़िगरेशन जानकारी को क्वेरी करता है। qdescription ---- एक सेवा के विवरण का वर्णन करता है। विफलता -------- विफलता पर एक सेवा द्वारा किए गए कार्यों को पूरा करता है। हटाना ---------- एक सेवा को हटाता है (रजिस्ट्री से)। create ---------- एक सेवा बनाता है। (इसे रजिस्ट्री में जोड़ता है)। नियंत्रण --------- एक सेवा के लिए एक नियंत्रण भेजता है। sdshow ---------- एक सेवा के सुरक्षा विवरणक को प्रदर्शित करता है। sdset ----------- एक सेवा का सुरक्षा डिस्क्रिप्टर सेट करता है। GetDisplayName - एक सेवा के लिए DisplayName हो जाता है। GetKeyName ------ सेवा के लिए ServiceKeyName हो जाता है। EnumDepend ------ Enumerates Service निर्भरताएँ। निम्न आदेशों को सेवा नाम की आवश्यकता नहीं है: sc <server> <कमांड> <विकल्प> बूट ------------ (ठीक है | बुरा) इंगित करता है कि क्या अंतिम बूट होना चाहिए अंतिम ज्ञात-अच्छे बूट विन्यास के रूप में सहेजा जा सकता है लॉक ------------ सर्विस डेटाबेस को लॉक करता है QueryLock ------- SCManager डेटाबेस के लिए लॉकस्टैटस को क्वेरी करता है उदाहरण: sc शुरू करें MyService
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
रिटर्न कोड:
NET कमांड डॉक्यूमेंटेड Win32_Service क्लास रिटर्न कोड (सर्विस नॉट एक्टिव, सर्विस रिक्वेस्ट टाइमआउट इत्यादि) को वापस नहीं करता है और कई त्रुटियों के लिए बस Errorlevel 2 लौटाएगा।
यहां देखें: http://ss64.com/nt/net_service.html
NET
नहीं है , जबकि बस सेवा से संबंधित कार्यों के लिए SC
है बस सेवा से संबंधित कार्यों के लिए।
errorlevel
2 लौटा है, यहां देखें कि त्रुटि परिणाम की व्याख्या कैसे करें ।
आप NET START कमांड का उपयोग कर सकते हैं और फिर ERRORLEVEL पर्यावरण चर की जाँच कर सकते हैं, जैसे
net start [your service]
if %errorlevel% == 2 echo Could not start service.
if %errorlevel% == 0 echo Service started successfully.
echo Errorlevel: %errorlevel%
अस्वीकरण: मैंने इसे अपने सिर के ऊपर से लिखा है, लेकिन मुझे लगता है कि यह काम करेगा।
मैंने इसके लिए अपनी व्यक्तिगत बैच फ़ाइल बनाई है, मेरा थोड़ा अलग है, लेकिन जैसा कि आप फिट देखते हैं, संशोधित करने के लिए स्वतंत्र महसूस करते हैं। मैंने इसे थोड़ी देर पहले बनाया था क्योंकि मैं ऊब गया था और लोगों के लिए एक सरल तरीका बनाना चाहता था ताकि ऑटो को समाप्त करने, शुरू करने, रोकने या सेटिंग करने में सक्षम हो। यह BAT फाइल केवल अनुरोध करती है कि आप सेवा नाम का इनपुट करें और यह आपके लिए बाकी काम करेगा। मुझे महसूस नहीं हुआ कि वह किसी ऐसी चीज की तलाश कर रहा है जिसमें कोई त्रुटि हो, मुझे उस हिस्से को गलत समझना चाहिए। हालाँकि आमतौर पर यह लाइन के अंत में >> 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
से रिटर्न कोड का उपयोग करना net start
और net stop
मुझे सबसे अच्छी विधि की तरह लगता है। इस पर एक नज़र डालें: नेट स्टार्ट रिटर्न कोड ।
सिंटेक्स मुझे हमेशा मिलता है .... इसलिए ...
यहां स्पष्ट रूप से एक बैच फ़ाइल में एक पंक्ति को कैसे जोड़ा जाए जो एक दूरस्थ सेवा (किसी अन्य मशीन पर) को मार देगा यदि आप दोनों मशीनों पर व्यवस्थापक हैं, तो .bat को एक व्यवस्थापक के रूप में चलाएं, और मशीनें एक ही डोमेन पर हैं। मशीन का नाम UNC प्रारूप \ myserver के रूप में है
sc \\ip.ip.ip.ip stop p4_1
इस स्थिति में ... p4_1 सेवा नाम और प्रदर्शन नाम दोनों था, जब आप सेवा प्रबंधक में सेवा के लिए गुण देखते हैं। आपको सेवा नाम का उपयोग करना होगा।
आपकी सेवा Ops दीवाने के लिए ... अपने कारण कोड और टिप्पणी को सुनिश्चित करें! यानी '4' जो 'नियोजित' के बराबर है और टिप्पणी 'रखरखाव के लिए सर्वर रोक'
sc \\ip.ip.ip.ip stop p4_1 4 Stopping server for maintenance
CMD
अन्य उपयोगकर्ता / आईडी के रूप में चलाते हैं और runas /user:Domain\UserName cmd
फिर अपना पासवर्ड दर्ज करें। सीएमडी निर्दिष्ट उपयोगकर्ता खाते के रूप में चलना शुरू कर देगा।
हम यह सोचना चाहते हैं कि "नेट स्टॉप" सेवा बंद हो जाएगी। अफसोस की बात है, वास्तविकता यह नहीं है कि काला और सफेद। यदि सेवा को बंद होने में लंबा समय लगता है, तो सेवा बंद होने से पहले कमांड वापस आ जाएगी। हालाँकि, आपको पता नहीं चलेगा, जब तक कि आप एररलेवल की जाँच नहीं करते।
समाधान लूप राउंड के लिए सेवा की स्थिति की तलाश में है जब तक कि इसे रोक नहीं दिया जाता है, हर बार लूप को गोल करने के लिए विराम के साथ।
लेकिन उसके बाद फिर से...
मैं देख रहा हूं कि पहली सेवा को रुकने में लंबा समय लगता है, फिर बाद की सेवा के लिए "नेट स्टॉप" बस कुछ नहीं करने के लिए प्रकट होता है। सेवा प्रबंधक में सेवा को देखें, और इसकी स्थिति अभी भी "प्रारंभ" है - "स्टॉपिंग" में कोई बदलाव नहीं। फिर भी मैं SCM का उपयोग करके मैन्युअल रूप से इस दूसरी सेवा को रोक सकता हूं, और यह 3 या 4 सेकंड में बंद हो जाता है।
मैंने अभी ऊपर जोनास के उदाहरण का उपयोग किया है और 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%
बदलें stop
करने के लिए start
और रिवर्स में काम करता है।
मैनुअल सेवा पुनरारंभ ठीक है - services.msc में "रिस्टार्ट" बटन है, लेकिन कमांड लाइन में sc और net दोनों कमांड में "पुनरारंभ" स्विच का अभाव है और यदि पुनरारंभ को cmd / bat फाइल में शेड्यूल किया गया है, तो सेवा को रोक दिया जाता है और तुरंत शुरू कर दिया जाता है, कभी-कभी यह एक त्रुटि मिलती है क्योंकि सेवा अभी तक बंद नहीं हुई है, चीजों को बंद करने के लिए कुछ समय चाहिए।
यह एक त्रुटि उत्पन्न कर सकता है: sc stop sc start
टाइमआउट सम्मिलित करना एक अच्छा विचार है, मैं पिंग का उपयोग करता हूं (यह हर 1 सेकंड में पिंग करता है): sc stop ping localhost -n 60 sc start
यहाँ बैच का उपयोग करके सिस्टम पुनर्स्थापना शुरू करने के लिए विंडोज 10 कमांड है:
sc config swprv start= Auto
आप उन आदेशों को भी पसंद कर सकते हैं:
सिस्टम स्टार्ट को पुनर्स्थापित करने के लिए रजिस्ट्री मान बदलें
REG ADD "HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ SystemRestore" / v DisableSR / t REG_DWORD / d 0 / f
एक सिस्टम पुनर्स्थापना बिंदु बनाएँ
Wmic.exe / Namespace: \ root \ default पथ SystemRestore Call CreateRestorePoint "djibe ने आपके पीसी को सहेजा", 100, 12
सिस्टम पुनर्स्थापना डिस्क उपयोग बदलें
vssadmin शैडोस्टोरेज़ / के लिए = C: / on = C: / maxsize = 10%
का आनंद लें
कभी-कभी आप पा सकते हैं कि स्टॉप काम नहीं करता है ।।
मेरा SQlServer कभी-कभी ऐसा करता है। निम्न कमांडलाइन का उपयोग करके इसे मारता है। यदि आपको वास्तव में सामान को मारने के लिए आपकी स्क्रिप्ट की आवश्यकता है, जो बंद नहीं करता है। मैं इसे अंतिम उपाय के रूप में करना चाहूंगा
taskkill /pid [pid number] /f
मैं C # में एक विंडोज़ सेवा लिख रहा हूं, स्टॉप / अनइंस्टॉल / बिल्ड / इंस्टॉल / स्टार्ट लूप बहुत थका हुआ है। एक मिनी स्क्रिप्ट लिखी, इसे बुलाया reploy.bat
और लूप को स्वचालित करने के लिए मेरे विजुअल स्टूडियो आउटपुट डायरेक्टरी (एक जिसमें निर्मित सेवा निष्पादन योग्य है) में गिरा दिया।
बस इन 3 vars सेट करें
servicename
: यह विंडोज सर्विस कंट्रोल पैनल (services.msc) पर दिखाई देता है
slndir
: फ़ोल्डर (पूर्ण पथ नहीं) जिसमें आपका समाधान (.sln) फ़ाइल है
binpath
: पूर्ण पथ (फ़ोल्डर पथ नहीं) निर्माण से निष्पादन योग्य सेवा के लिए
नोट: यह काम करने के लिए Visual Studio डेवलपर कमांड लाइन से चलाने की आवश्यकता है msbuild
।
SET servicename="My Amazing Service"
SET slndir="C:dir\that\contains\sln\file"
SET binpath="C:path\to\service.exe"
SET currdir=%cd%
call net stop %servicename%
call sc delete %servicename%
cd %slndir%
call msbuild
cd %bindir%
call sc create %servicename% binpath=%binpath%
call net start %servicename%
cd %currdir%
शायद यह किसी की मदद करता है :)