अगर यह क्रैश हो जाता है तो मैं अपने आप विंडोज सेवा को कैसे पुनः आरंभ कर सकता हूं?


57

मेरे पास एक विंडोज सेवा है जो हर कुछ दिनों में अप्रत्याशित रूप से बाहर निकलती है। क्या यह सुनिश्चित करने के लिए इसे मॉनिटर करने का एक सरल तरीका है कि अगर यह दुर्घटनाग्रस्त हो जाए तो इसे जल्दी से फिर से शुरू किया जाए?

जवाबों:


77

सेवा एप्लिकेशन के तहत, प्रश्न में सेवा के गुणों का चयन करें।

पुनर्प्राप्ति टैब देखें - सभी प्रकार के विकल्प हैं - मैं सेवा को पुनरारंभ करने के लिए पहला और दूसरा विफलता सेट करूंगा, तीसरा एक बैच प्रोग्राम चलाने के लिए जो कि बीएलएटी को तीसरी विफलता अधिसूचना के साथ एक ईमेल है।

आपको प्रतिदिन फेल काउंट को रीसेट करने के लिए Reset Fail Count को 1 पर सेट करना चाहिए।

संपादित करें:

ऐसा लगता है कि आप एक कमांड लाइन के माध्यम से ऐसा कर सकते हैं:

SC failure w3svc reset= 432000  actions= restart/30000/restart/60000/run/60000
SC failure w3svc command= "MyBatchFile.cmd"

आपकी MyBatchFile.CMD फ़ाइल इस तरह दिख सकती है:

blat - -body "Service W3svc Failed" -subject "SERVICE ERROR" -to Notify@Example.com -server SMTP.Example.com -f Administrator@Example.com

3
सभी अच्छी चीजें, लेकिन +1 विशेष रूप से ईमेल अधिसूचना सलाह और कमांड-लाइन सामान के लिए।
मैक्सिमस मिनिमस

डिस्क पर बैच फ़ाइल कहाँ रहनी चाहिए?
मैट

कहीं भी। इसके साथ SC failure w3svc command= "MyBatchFile.cmd"पथ या C: \ Windows \ System32 में होना चाहिए। यदि आप एक पूर्ण पथ का उपयोग करते हैं, तो आप इसे किसी भी निर्देशिका में रख सकते हैंSC failure w3svc command= "c:\Stuff\MyBatchFile.cmd"
क्रिस्टोफर_जीविस

9

Services.msc खोलें, सेवा के गुणों को खोलने के लिए सेवा पर डबल-क्लिक करें, एक रिकवरी टैब है और उन सेटिंग्स को आपको विफलता पर सेवा को फिर से शुरू करने की अनुमति देनी चाहिए।


4

पुनर्प्राप्ति समय को शून्य पर सेट करने का प्रयास करें:

यहाँ छवि विवरण दर्ज करें

कमांड लाइन समकक्ष:

SC failure YOUR_SERVICE_NAME reset= 0 actions= restart/0/restart/0/restart/0

वैसे भी कभी-कभी ऑटो रिकवरी सही तरीके से काम नहीं करती है और इसने थर्ड पार्टी सॉफ्टवेयर का उपयोग करने की सिफारिश की है। ऐसा लगता है जब 0 खिड़कियों के एक्जिट कोड के साथ सर्विस एक्सेप्टेंस से बाहर निकलने की कोशिश नहीं की जाती है।


1

मैं HostForLife.eu पर अपनी विंडोज़ 2008 सर्वर पर ServiceKeeper का उपयोग कर रहा हूं और यह बहुत अच्छा काम करता है। पहले, मेरे पास ServiceHawk की समीक्षा थी, लेकिन मैं इसके आसान प्रबंधन और इंटरफ़ेस के लिए ServiceKeeper का उपयोग करना पसंद करता हूं।


1

रुकने पर मुझे सेवा शुरू करने की समान आवश्यकता थी। सबसे आसान उपाय मुझे लगा कि हर 5 मिनट में विंडोज़ टास्क शेड्यूलर में नीचे दिए गए कमांड को निष्पादित करना है:

शुद्ध शुरुआत MyServiceName

यह कमांड मूल रूप से सेवा शुरू करेगा (यदि रोका गया है) और इसका कोई प्रभाव नहीं है यदि सेवा पहले से ही चल रही है।


1

मैंने हाल ही में एक पॉवरशेल स्क्रिप्ट चलाने के लिए एक रिकवरी विकल्प लागू किया है जो सेवा को परिभाषित संख्या को फिर से शुरू करने का प्रयास करता है और निष्कर्ष पर एक ईमेल अधिसूचना भेजता है, यह भी।

कई प्रयासों के बाद (और अन्य सभी चीजों के बावजूद मैंने देखा है) सेवाओं में रिकवरी टैब पर क्षेत्रों का विन्यास इस प्रकार है:

प्रोग्राम: Powershell.exe
** Not C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ Powershell.exe

कमांड लाइन पैरामीटर: -कमांड "और {SomePath \ YourScript.ps1 '$ args [0]' '$ args [1]' $ args [n] '}"

जैसे: -कमांड "और {C: \ PowershellScripts \ ServicesRecovery.ps1 'सेवा का नाम"} "

** $ args ऐसे पैरामीटर हैं जो आपकी स्क्रिप्ट में पास किए जाएंगे। इनकी आवश्यकता नहीं है।

यहाँ पॉवरशेल स्क्रिप्ट है:

cd $PSScriptRoot

$n = $args[0]

function CreateLogFile {
$events = Get-EventLog -LogName Application -Source SomeSource -Newest 40
if (!(Test-Path "c:\temp")) {
    New-Item -Path "c:\temp" -Type directory}
if (!(Test-Path "c:\temp\ServicesLogs.txt")) {
    New-Item -Path "c:\temp" -Type File -Name "ServicesLogs.txt"}
    $events | Out-File -width 600 c:\temp\ServicesLogs.txt
}

function SendEmail  {
$EmailServer = "SMTP Server"
$ToAddress = "Name@domain.com"
$FromAddress = "Name@domain.com"

CreateLogFile

$Retrycount = $Retrycount + 1
send-mailmessage -SmtpServer $EmailServer -Priority High -To $ToAddress -From $FromAddress -Subject "$n Service failure" `
-Body "The $n service on server $env:COMPUTERNAME has stopped and was unable to be restarted after $Retrycount attempts." -Attachments c:\temp\ServicesLogs.txt

Remove-Item "c:\temp\ServicesLogs.txt"
}

function SendEmailFail  {
$EmailServer = "SMTP Server"
$ToAddress = "Name@domain.com"
$FromAddress = "Name@domain.com"

CreateLogFile

$Retrycount = $Retrycount + 1
send-mailmessage -SmtpServer $EmailServer -Priority High -To $ToAddress -From $FromAddress -Subject "$n Service Restarted" `
-Body "The $n service on server $env:COMPUTERNAME stopped and was successfully restarted after $Retrycount attempts. The relevant system logs are attached." -Attachments c:\temp\ServicesLogs.txt

Remove-Item "c:\temp\ServicesLogs.txt"
}

function StartService {

$Stoploop = $false

do {
   if ($Retrycount -gt 3){
     $Stoploop = $true
     SendEmail
     Break
    }

   $i =  Get-WmiObject win32_service | ?{$_.Name -imatch $n} | select Name, State, StartMode
    if ($i.State -ne "Running" -and $i.StartMode -ne "Disabled") {

        sc.exe start $n
        Start-Sleep -Seconds 35

        $i =  Get-WmiObject win32_service | ?{$_.Name -imatch $n} | select State
          if ($i.state -eq "Running"){
              $Stoploop = $true
              SendEmailFail}
          else {$Retrycount = $Retrycount + 1}
    }        
}
While ($Stoploop -eq $false)
}

[int]$Retrycount = "0"
StartService

0

यह एक समान धागे पर मेरा जवाब था आशा है कि यह मदद करता है ...

आप जरूरत पड़ने पर कंप्यूटर पर समय-समय पर सेवा को फिर से शुरू करने के लिए इस तरह से एक साधारण vbs स्क्रिप्ट को शेड्यूल कर सकते हैं।

strComputer = "।" 
strSvcName = "your_SERVICE_NAME" 
objWMI सेट करें = GetObject ("winmgmts: \\" और strComputer & "\ root \ cimv2")
सेट objService = objWMI.Get ("Win32_Service.Name = '" और strSvcName & "" ")
अगर objService.State = "स्टॉप्ड" तब
    objService.StartService ()
अगर अंत



0

सुपर उपयोगकर्ता पर किसी ने एक समान प्रश्न पूछा: आप एक उपकरण स्थापित कर सकते हैं जो विंडोज़ सेवाओं की निगरानी करता है। सेवा हॉक जैसी कोई चीज़ आपको सेवाओं को चालू रखने में मदद करेगी, या आपको सेवा को सुचारू रूप से चलाने के लिए स्वचालित रूप से (संभवतः रात के दौरान) शेड्यूल करने की अनुमति देगी।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.