Bir Windows hizmetini çökerse otomatik olarak nasıl yeniden başlatabilirim?


57

Birkaç günde bir beklenmedik bir şekilde çıkan bir Windows hizmetim var. Çarpması durumunda hızlı bir şekilde yeniden başlatıldığından emin olmak için izlemenin basit bir yolu var mı?

Yanıtlar:


77

Servisler uygulaması altında, söz konusu servisin özelliklerini seçin.

Kurtarma sekmesini görüntüleyin - seçeneklerin her türlü bulunmaktadır - Bir toplu iş programını çalıştırmak için, Üçüncü yeniden hizmeti Birinci ve İkinci Hatası belirlersiniz Blat üçüncü hatası bildiriminin bir e-postanın dışarı 'ın.

Arıza sayısını her gün sıfırlamak için Sıfırlama Arıza Sayımını 1 olarak da ayarlamalısınız.

DÜZENLE:

Bunu bir komut satırı aracılığıyla yapabilirsiniz gibi görünüyor:

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

MyBatchFile.CMD dosyanız aşağıdaki gibi görünebilir:

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

3
Tüm iyi şeyler, ancak özellikle e-posta bildirimi tavsiyesi ve komut satırı için +1.
Maximus Minimus

Toplu iş dosyası diskte nerede bulunmalıdır?
Matt

Herhangi bir yer. Bununla SC failure w3svc command= "MyBatchFile.cmd"birlikte yolun içinde veya C: \ Windows \ System32 olmalıdır. Tam yol kullanıyorsanız, herhangi bir dizine koyabilirsiniz, yaniSC failure w3svc command= "c:\Stuff\MyBatchFile.cmd"
Christopher_G_Lewis

9

Services.msc'yi açın, servisin özelliklerini açmak için servise çift tıklayın, bir Kurtarma sekmesi var ve bu ayarlar arıza durumunda servisi yeniden başlatmanıza izin vermeli.


4

Kurtarma zamanını sıfıra ayarlamayı deneyin:

görüntü tanımını buraya girin

Komut satırı eşdeğeri:

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

Her neyse, bazen otomatik kurtarma düzgün çalışmıyor ve üçüncü taraf yazılımı kullanmanız önerilir. Görünüşe göre servis 0 pencereden çıkış koduyla zarifçe çıkarken onu kurtarmaya çalışmaz.


1

HostKorLife.eu adresindeki Windows 2008 sunucumda ServiceKeeper kullanıyorum ve çok iyi çalışıyor. Daha önce, ServiceHawk hakkında bir inceleme yapmıştım, ancak kolay yönetimi ve arayüzü için ServiceKeeper'ı kullanmayı tercih ettim.


1

Eğer durdurulursa bir servisi başlatmak için de benzer bir gereksinim vardı. Düşündüğüm en basit çözüm, aşağıdaki komutu her 5 dakikada bir windows görev zamanlayıcısında uygulamaktı:

net start MyServiceName

Bu komut temel olarak servisi başlatır (durduysa) ve eğer servis çalışıyorsa etkisi olmaz.


1

Kısa bir süre önce hizmeti belirli bir sayıda yeniden başlatmayı deneyen ve sonuçta bir e-posta bildirimi gönderen bir powershell betiği çalıştırmak için bir kurtarma seçeneği kullandım.

Birkaç denemeden sonra (ve gördüğüm tüm diğer şeylere rağmen) Hizmetlerdeki kurtarma sekmesindeki alanların yapılandırması aşağıdaki gibidir:

Program: Powershell.exe
** C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ Powershell.exe Değil

Komut satırı parametreleri: -command "& {SomePath \ YourScript.ps1 '$ args [0]' '$ args [1]' '$ args [n]'}"

örneğin: -command "& {C: \ PowershellScripts \ ServicesRecovery.ps1 'Hizmet Adı'}"

** $ args, betiğinize geçirilecek parametrelerdir. Bunlar gerekli değil.

İşte powershell betiği:

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

Bu da benzer benim cevap oldu parçacığı bu yardımcı olur Hope ...

Gerekirse bilgisayardaki hizmeti düzenli aralıklarla yeniden başlatmak için bunun gibi basit bir vbs komut dosyası zamanlayabilirsiniz.

strComputer = "." 
strSvcName = "YOUR_SERVICE_NAME" 
set objWMI = GetObject ("winmgmts: \\" & strComputer & "\ root \ cimv2")
objService = objWMI.Get ("Win32_Service.Name = '" & strSvcName & "'") olarak ayarlayın
Eğer objService.State = "Durduruldu" Sonra
    objService.StartService ()
Bittiğinde



0

Birisi Süper Kullanıcı'da benzer bir soru sordu: Windows servislerini izleyen bir araç kurabilirsiniz. Service Hawk gibi bir hizmet , hizmetleri sorunsuz bir şekilde devam ettirmek için hizmetleri başlatmaya devam etmenize ya da otomatik yeniden başlatma programlamanıza (muhtemelen gece boyunca) izin verir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.