Vraag Hoe kan ik een Windows-service automatisch opnieuw opstarten als deze crasht?


Ik heb een Windows-service die om de paar dagen onverwachts wordt afgesloten. Is er een eenvoudige manier om het te controleren om ervoor te zorgen dat het snel opnieuw wordt opgestart als het crasht?


46
2017-07-31 16:25


oorsprong




antwoorden:


Selecteer onder de toepassing Services de eigenschappen van de betreffende service.

Bekijk het hersteltabblad - er zijn allerlei opties - Ik zou First & Second Failure instellen om de Service opnieuw te starten, Third om een ​​batchprogramma uit te voeren dat BLATe-mail een e-mail met de derde foutmelding.

U moet ook het Reset Failure Count op 1 zetten om het aantal mislukkingen dagelijks te resetten.

BEWERK:

Het lijkt erop dat u dit via een opdrachtregel kunt doen:

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

Uw MyBatchFile.CMD-bestand kan er als volgt uitzien:

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

68
2017-07-31 16:30



Allemaal goede dingen, maar +1 speciaal voor het advies voor e-mailmeldingen en de opdrachtregel. - Maximus Minimus
Waar moet het batchbestand live op schijf staan? - Matt
Overal. Met SC failure w3svc command= "MyBatchFile.cmd" het zou in het pad moeten zijn of C: \ Windows \ System32. Je kunt het in elke map plaatsen als je een volledig pad gebruikt, d.w.z. SC failure w3svc command= "c:\Stuff\MyBatchFile.cmd" - Christopher_G_Lewis


Open Services.msc, dubbelklik op de service om de eigenschappen van de service te openen, er is een tabblad Herstel en met deze instellingen kunt u de service opnieuw starten na een fout.


8
2017-07-31 16:30





Dit was mijn antwoord op een soortgelijke draad Ik hoop dat dit helpt...

U kunt een eenvoudig vbs-script zoals dit plannen om de service op de computer zo nodig periodiek opnieuw te starten.

strComputer = "."
strSvcName = "YOUR_SERVICE_NAME"
objWMI instellen = GetObject ("winmgmts: \\" & strComputer & "\ root \ cimv2")
objService = objWMI.Get instellen ("Win32_Service.Name = '" & strSvcName & "'")
Als objService.State = "Gestopt" dan
    objService.StartService ()
Stop als



0
2017-07-31 16:29





Iemand stelde een soortgelijke vraag aan Super User: u zou een tool kunnen installeren die Windows-services bewaakt. Zoiets als Service Hawk zou u kunnen helpen om de services opgestart te houden, of u kunt automatische herstart plannen (mogelijk tijdens de nacht) om de service soepel te laten verlopen.


0
2017-10-12 01:10





ik gebruik ServiceKeeper op mijn windows 2008-server op HostForLife.eu en het werkt erg goed. Eerder had ik een recensie over ServiceHawk, maar ik gebruik ServiceKeeper het liefst voor zijn eenvoudigere beheer en interface.


0
2017-10-12 03:43





Ik had een vergelijkbare vereiste om een ​​service te starten als ik stopte. De eenvoudigste oplossing die ik dacht was om het onderstaande commando uit te voeren in Windows taakplanner om de 5 minuten:

net start MyServiceName

Deze opdracht start in principe de service (indien gestopt) en heeft geen effect als de service al wordt uitgevoerd.


0
2017-12-19 10:53





Ik heb onlangs een hersteloptie geïmplementeerd om een ​​powershell-script uit te voeren dat probeert de service een bepaald aantal keren opnieuw op te starten en stuurt een e-mailmelding aan het einde, het ook.

Na verschillende pogingen (en ondanks alle andere dingen die ik heb gezien) De configuratie van de velden op het tabblad Herstel in services is als volgt:

Programma: Powershell.exe
   ** Niet C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ Powershell.exe

Opdrachtregelparameters: -command "& {SomePath \ YourScript.ps1 '$ args [0]' '$ args [1]' '$ args [n]'}"

bijv .: -command "& {C: \ PowershellScripts \ ServicesRecovery.ps1 'Service Name'}"

** De $ args zijn parameters die aan uw script worden doorgegeven. Deze zijn niet verplicht.

hier is het powershellscript:

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
2018-02-08 21:50