Risposte:
Nell'applicazione Servizi, selezionare le proprietà del servizio in questione.
Visualizza la scheda di ripristino - ci sono tutti i tipi di opzioni - Imposterei First & Second Failure per riavviare il servizio, Third per eseguire un programma batch che BLAT ha inviato un'email con la terza notifica di errore.
È inoltre necessario impostare il ripristino del conteggio errori su 1 per ripristinare quotidianamente il conteggio errori.
MODIFICARE:
Sembra che tu possa farlo tramite una riga di comando:
SC failure w3svc reset= 432000 actions= restart/30000/restart/60000/run/60000
SC failure w3svc command= "MyBatchFile.cmd"
Il tuo file MyBatchFile.CMD può assomigliare a questo:
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"
esso dovrebbe essere nel percorso o C: \ Windows \ System32. Puoi inserirlo in qualsiasi directory se usi un percorso completo, ad es.SC failure w3svc command= "c:\Stuff\MyBatchFile.cmd"
Aprire Services.msc, fare doppio clic sul servizio per aprire le Proprietà del servizio, è presente una scheda Ripristino e tali impostazioni dovrebbero consentire di riavviare il servizio in caso di errore.
Prova a impostare il tempo di recupero su zero:
L'equivalente della riga di comando:
SC failure YOUR_SERVICE_NAME reset= 0 actions= restart/0/restart/0/restart/0
Tuttavia, a volte il ripristino automatico non funziona correttamente e si consiglia di utilizzare software di terze parti. Sembra che il servizio esca con garbo con il codice di uscita di 0 finestre non tenti di recuperarlo.
Sto usando ServiceKeeper sul mio server Windows 2008 su HostForLife.eu e funziona molto bene. In precedenza, avevo una recensione su ServiceHawk, ma preferisco usare ServiceKeeper per la sua gestione e interfaccia più semplici.
Avevo un requisito simile per avviare un servizio se interrotto. La soluzione più semplice che ho pensato è stata quella di eseguire il comando seguente nell'utilità di pianificazione di Windows ogni 5 minuti:
net start MyServiceName
Questo comando avvia sostanzialmente il servizio (se interrotto) e non ha alcun effetto se il servizio è già in esecuzione.
Di recente ho implementato un'opzione di ripristino per eseguire uno script PowerShell che tenta di riavviare il servizio un numero definito di volte e invia una notifica e-mail alla conclusione, anche.
Dopo diversi tentativi (e nonostante tutte le altre cose che ho visto) La configurazione dei campi nella scheda di ripristino nei servizi è la seguente:
Programma: Powershell.exe
** Non C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ Powershell.exe
Parametri della riga di comando: -command "& {SomePath \ YourScript.ps1 '$ args [0]' '$ args [1]' '$ args [n]'}"
ad esempio: -command "& {C: \ PowershellScripts \ ServicesRecovery.ps1 'Service Name'}"
** $ args sono parametri che verranno passati al tuo script. Questi non sono richiesti.
ecco lo script 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
Questa è stata la mia risposta su un thread simile Spero che questo aiuti ...
È possibile pianificare un semplice script vbs come questo per riavviare periodicamente il servizio sul computer, se necessario.
strComputer = "." strSvcName = "YOUR_SERVICE_NAME" set objWMI = GetObject ("winmgmts: \\" & strComputer & "\ root \ cimv2") set objService = objWMI.Get ("Win32_Service.Name = '" & strSvcName & "'") Se objService.State = "Stopped" Quindi objService.StartService () Finisci se
Qualcuno ha posto una domanda simile al Super User: è possibile installare uno strumento che monitora i servizi di Windows. Qualcosa come Service Hawk ti aiuterebbe a mantenere i servizi avviati o ti consentirebbe di pianificare i riavvii automatici (possibilmente durante la notte) per mantenere il servizio senza intoppi.