Yanıtlar:
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
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"
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.
Kurtarma zamanını sıfıra ayarlamayı deneyin:
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.
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.
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.
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
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
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.