Odpowiedzi:
W aplikacji Usługi wybierz właściwości danej usługi.
Wyświetl zakładkę odzyskiwania - istnieją różne opcje - ustawię Pierwszą i drugą nieudaną próbę ponownego uruchomienia usługi, Trzecią, aby uruchomić program wsadowy, który BLAT wyśle wiadomość e-mail z trzecim powiadomieniem o awarii.
Powinieneś także ustawić Resetuj Licznik awarii na 1, aby codziennie resetować licznik awarii.
EDYTOWAĆ:
Wygląda na to, że możesz to zrobić za pomocą wiersza poleceń:
SC failure w3svc reset= 432000 actions= restart/30000/restart/60000/run/60000
SC failure w3svc command= "MyBatchFile.cmd"
Twój plik MyBatchFile.CMD może wyglądać następująco:
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"
powinien on znajdować się w ścieżce lub C: \ Windows \ System32. Możesz umieścić go w dowolnym katalogu, jeśli użyjesz pełnej ścieżki, tj.SC failure w3svc command= "c:\Stuff\MyBatchFile.cmd"
Otwórz Services.msc, kliknij dwukrotnie usługę, aby otworzyć Właściwości usługi, znajduje się karta Odzyskiwanie, a te ustawienia powinny umożliwić ponowne uruchomienie usługi po awarii.
Spróbuj ustawić czas odzyskiwania na zero:
Odpowiednik wiersza poleceń:
SC failure YOUR_SERVICE_NAME reset= 0 actions= restart/0/restart/0/restart/0
W każdym razie czasami automatyczne odzyskiwanie nie działa poprawnie i zaleca się korzystanie z oprogramowania innych firm. Wygląda na to, że usługa z wdziękiem kończy pracę z kodem wyjścia 0 okien, nie próbuje go odzyskać.
Korzystam z ServiceKeeper na serwerze Windows 2008 na HostForLife.eu i działa bardzo dobrze. Wcześniej miałem recenzję na ServiceHawk, ale wolę używać ServiceKeeper dla łatwiejszego zarządzania i interfejsu.
Miałem podobny wymóg, aby uruchomić usługę, jeśli zostanie zatrzymana. Najprostszym rozwiązaniem, jakie myślałem, było wykonanie poniższego polecenia w harmonogramie zadań systemu Windows co 5 minut:
net start MyServiceName
To polecenie w zasadzie uruchomi usługę (jeśli zostanie zatrzymana) i nie będzie miało wpływu, jeśli usługa jest już uruchomiona.
Niedawno wdrożyłem opcję odzyskiwania, aby uruchomić skrypt PowerShell, który próbuje ponownie uruchomić usługę określoną liczbę razy i wysyła powiadomienie e-mail na zakończenie, to także.
Po kilku próbach (i pomimo wszystkich innych rzeczy, które widziałem) Konfiguracja pól na karcie odzyskiwania w usługach jest następująca:
Program: Powershell.exe
** Nie C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ Powershell.exe
Parametry wiersza poleceń: -command "& {SomePath \ YourScript.ps1 '$ args [0]' '$ args [1]' '$ args [n]'}”
np .: -command "& {C: \ PowershellScripts \ ServicesRecovery.ps1„ Nazwa usługi ”}”
** Argenty $ to parametry, które zostaną przekazane do skryptu. Nie są wymagane.
oto skrypt PowerShell:
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
To była moja odpowiedź na podobny wątek. Mam nadzieję, że to pomaga ...
Możesz zaplanować prosty skrypt VBS, taki jak ten, aby okresowo uruchamiał usługę na komputerze w razie potrzeby.
strComputer = "." strSvcName = "YOUR_SERVICE_NAME" set objWMI = GetObject ("winmgmts: \\" & strComputer & "\ root \ cimv2") set objService = objWMI.Get („Win32_Service.Name = '” & strSvcName & „” ”) Jeśli objService.State = "Stopped" Wtedy objService.StartService () End If
Ktoś zadał podobne pytanie w Super User: Możesz zainstalować narzędzie, które monitoruje usługi Windows. Coś w rodzaju Service Hawk pomoże ci utrzymać usługi uruchomione lub pozwoli ci zaplanować automatyczne ponowne uruchomienie (być może w nocy), aby usługa działała sprawnie.