सवाल यदि यह क्रैश हो तो मैं स्वचालित रूप से Windows सेवा को पुनरारंभ कैसे कर सकता हूं?


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


46
2017-07-31 16:25


मूल




जवाब:


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

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

असफल असफलता को रीसेट करने के लिए आपको रीसेट विफल गणना को 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

68
2017-07-31 16:30



सभी अच्छी चीजें, लेकिन विशेष रूप से ईमेल अधिसूचना सलाह और कमांड लाइन सामग्री के लिए +1। - Maximus Minimus
बैच फ़ाइल डिस्क पर कहाँ रहनी चाहिए? - Matt
कहीं भी। साथ में SC failure w3svc command= "MyBatchFile.cmd" यह पथ या सी: \ विंडोज \ System32 में होना चाहिए। यदि आप पूर्ण पथ का उपयोग करते हैं तो आप इसे किसी भी निर्देशिका में डाल सकते हैं i.e. SC failure w3svc command= "c:\Stuff\MyBatchFile.cmd" - Christopher_G_Lewis


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


8
2017-07-31 16:30





यह एक समान पर मेरा जवाब था धागा उम्मीद है की यह मदद करेगा...

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

strComputer = "।"
strSvcName = "YOUR_SERVICE_NAME"
objWMI = GetObject सेट करें ("winmgmts: \\" और strcomputer और "\ root \ cimv2")
objService = objWMI.Get सेट करें ("Win32_Service.Name = '" और strSvcName और "'")
यदि objService.State = "रोक दिया गया" तो
    objService.StartService ()
अगर अंत



0
2017-07-31 16:29





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


0
2017-10-12 01:10





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


0
2017-10-12 03:43





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

नेट स्टार्ट MyServiceName

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


0
2017-12-19 10:53





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

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

कार्यक्रम: पावरहेल.एक्सई
   ** नहीं सी: \ विंडोज \ System32 \ WindowsPowerShell \ v1.0 \ Powershell.exe

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

उदाहरण: - कमांड "और {सी: \ पावरहेलवल \ 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
2018-02-08 21:50