Antworten:
Wählen Sie unter der Anwendung "Dienste" die Eigenschaften des betreffenden Dienstes aus.
Anzeigen des Wiederherstellungsregisters - es gibt alle möglichen Optionen - Ich habe First & Second Failure (Erster und Zweiter Fehler) auf Restart the Service (Neustart des Dienstes) und Third (Dritter Fehler) eingestellt, um ein Stapelverarbeitungsprogramm auszuführen , mit dem BLAT eine E-Mail mit der dritten Fehlerbenachrichtigung versendet .
Sie sollten auch den Reset Fail Count auf 1 setzen, um den Fail Count täglich zurückzusetzen.
BEARBEITEN:
Sieht so aus, als könnten Sie dies über eine Befehlszeile tun:
SC failure w3svc reset= 432000 actions= restart/30000/restart/60000/run/60000
SC failure w3svc command= "MyBatchFile.cmd"
Ihre MyBatchFile.CMD-Datei kann folgendermaßen aussehen:
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"
sollte es im Pfad oder C: \ Windows \ System32 sein. Sie können es in ein beliebiges Verzeichnis stellen, wenn Sie einen vollständigen Pfad verwenden, z. B.SC failure w3svc command= "c:\Stuff\MyBatchFile.cmd"
Öffnen Sie "Services.msc", doppelklicken Sie auf den Dienst, um die Eigenschaften des Dienstes zu öffnen. Es gibt eine Registerkarte "Wiederherstellung". Mit diesen Einstellungen sollten Sie den Dienst bei einem Fehler neu starten können.
Versuchen Sie, die Erholungszeit auf Null zu setzen:
Das Befehlszeilenäquivalent:
SC failure YOUR_SERVICE_NAME reset= 0 actions= restart/0/restart/0/restart/0
Auf jeden Fall funktioniert die automatische Wiederherstellung manchmal nicht richtig und es wird empfohlen, Software von Drittanbietern zu verwenden. Es scheint, als würde ein ordnungsgemäßer Service-Exit mit einem Exit-Code von 0 Fenstern nicht versuchen, ihn wiederherzustellen.
Ich verwende ServiceKeeper auf meinem Windows 2008-Server bei HostForLife.eu und es funktioniert sehr gut. Zuvor hatte ich eine Überprüfung von ServiceHawk, bevorzuge jedoch die Verwendung von ServiceKeeper, um die Verwaltung und die Benutzeroberfläche zu vereinfachen.
Ich hatte eine ähnliche Anforderung, einen Dienst zu starten, wenn er gestoppt wurde. Die einfachste Lösung, die ich dachte, war, den folgenden Befehl alle 5 Minuten im Windows-Taskplaner auszuführen:
net start MyServiceName
Dieser Befehl startet den Dienst im Grunde (wenn er gestoppt ist) und hat keine Auswirkung, wenn der Dienst bereits ausgeführt wird.
Ich habe kürzlich eine Wiederherstellungsoption implementiert, um ein Powershell-Skript auszuführen, das versucht, den Dienst eine definierte Anzahl von Malen neu zu starten und zum Abschluss eine E-Mail-Benachrichtigung sendet.
Nach mehreren Versuchen (und trotz all der anderen Dinge, die ich gesehen habe) ist die Konfiguration der Felder auf der Registerkarte Wiederherstellung in Diensten wie folgt:
Programm: Powershell.exe
** Nicht C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ Powershell.exe
Befehlszeilenparameter: -command "& {SomePath \ YourScript.ps1 '$ args [0]' '$ args [1]' '$ args [n]'}"
Beispiel: -Befehl "& {C: \ PowershellScripts \ ServicesRecovery.ps1 'Dienstname'}"
** Die $ args sind Parameter, die an Ihr Skript übergeben werden. Diese sind nicht erforderlich.
Hier ist das Powershell-Skript:
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
Dies war meine Antwort auf einen ähnlichen Thread Hoffe, das hilft ...
Sie können ein einfaches vbs-Skript wie dieses planen, um den Dienst auf dem Computer bei Bedarf regelmäßig neu zu starten.
strComputer = "." strSvcName = "YOUR_SERVICE_NAME" set objWMI = GetObject ("winmgmts: \\" & strComputer & "\ root \ cimv2") set objService = objWMI.Get ("Win32_Service.Name = '" & strSvcName & "'") If objService.State = "Gestoppt" Dann objService.StartService () End If
Bei Super User stellte jemand eine ähnliche Frage: Sie könnten ein Tool installieren, das Windows-Dienste überwacht. So etwas wie Service Hawk würde Ihnen helfen, die Dienste am Laufen zu halten, oder es Ihnen ermöglichen, automatische Neustarts (möglicherweise während der Nacht) zu planen, damit der Dienst reibungslos läuft.