Как я могу автоматически перезапустить службу Windows, если она отказывает?

Это могло быть связано с дополнительными шагами, выполняемыми, которые не упоминаются здесь как

  • резервное копирование Журнала с truncate_only

  • или Вы переключились от ПОЛНОГО или режима восстановления С МАССОВЫМ ПРОТОКОЛИРОВАНИЕМ до ПРОСТОГО

57
задан 31 July 2009 в 19:25
8 ответов

В соответствии с Сервисным приложением, выберите свойства рассматриваемого сервиса.

Просмотрите вкладку восстановления - существуют все виды опций - я установил Первый и Второй Отказ Перезапустить Сервис, Треть для выполнения пакетной программы что BLAT's электронное письмо с третьим уведомлением об отказе.

Необходимо также установить количество Сбоя Сброса на 1 для сброса количества сбоя ежедневно.

Править:

Похож на Вас, может сделать это через командную строку:

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

Ваш MyBatchFile. Командный файл может быть похожим на это:

blat - -body "Service W3svc Failed" -subject "SERVICE ERROR" -to Notify@Example.com -server SMTP.Example.com -f Administrator@Example.com
77
ответ дан 28 November 2019 в 19:34
  • 1
    Весь хороший материал, но +1 специально для совета уведомления по электронной почте и материала командной строки. –  Maximus Minimus 31 July 2009 в 21:27

Откройте Services.msc, дважды щелкните по сервису для открытия Properties сервиса, существует вкладка Recovery, и те настройки должны позволить Вам перезапускать сервис на отказ.

9
ответ дан 28 November 2019 в 19:34

Это было моим ответом на подобном потоке Hope, которой это помогает...

Можно запланировать простой vbs сценарий как этот для перезапуска периодически сервиса на компьютер в случае необходимости.

strComputer = "." 
strSvcName = "YOUR_SERVICE_NAME" 
set objWMI = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
set objService = objWMI.Get("Win32_Service.Name='" & strSvcName & "'")
If objService.State= "Stopped" Then
    objService.StartService()
End If


0
ответ дан 28 November 2019 в 19:34

Я использую ServiceKeeper на своем сервере окон 2008 в HostForLife.eu, и он работает очень хороший. Ранее, у меня был обзор на ServiceHawk, но я предпочитаю использовать ServiceKeeper для его более легкого управления и интерфейса.

1
ответ дан 28 November 2019 в 19:34

Кто-то задал подобный вопрос в Суперпользователе: Вы могли установить инструмент, который контролирует сервисы окон. Что-то как Сервисный Ястреб помогло бы Вам сохранить сервисы запущенными или позволить Вам планировать автоматические перезапуски (возможно в течение ночи) для поддерживания сервиса в рабочем состоянии гладко.

0
ответ дан 28 November 2019 в 19:34

У меня было аналогичное требование для запуска службы в случае остановки. Самым простым решением, которое я подумал, было выполнение следующей команды в планировщике задач Windows каждые 5 минут:

net start MyServiceName

Эта команда в основном запускает службу (если она остановлена) и не имеет никакого эффекта, если служба уже запущена.

1
ответ дан 28 November 2019 в 19:34

Недавно я реализовал вариант восстановления для запуска сценария PowerShell, который пытается для перезапуска службы определенное количество раз и отправки уведомления по электронной почте при завершении, он также.

После нескольких попыток (и несмотря на все остальное, что я видел) Конфигурация полей на вкладке восстановления в службах следующая:

Программа: Powershell.exe
** Не C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ Powershell.exe

Параметры командной строки: -command "& {SomePath \ YourScript.ps1 '$ args [0]' '$ args [1]' '$ args [n]'} "

например: -command" & {C: \ PowershellScripts \ ServicesRecovery.ps1 'Service Name'} "

** $ args - это параметры, которые будут переданы вашему скрипту . Это не обязательно.

вот сценарий 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
1
ответ дан 28 November 2019 в 19:34

Intenteu establir el temps de recuperació a zero:

enter image description here

L'equivalent a la línia d'ordres:

Falla SC YOUR_SERVICE_NAME reset = 0 actions = restart / 0 / restart / 0 / restart / 0

De totes maneres, la recuperació automàtica de vegades no funciona correctament i es recomana utilitzar programari de tercers. Sembla que quan el servei surt amb gràcia amb el codi de sortida de 0 windows, no intenteu recuperar-lo.

4
ответ дан 28 November 2019 в 19:34

Теги

Похожие вопросы