Як я можу автоматично перезапустити службу Windows, якщо вона виходить з ладу?


57

У мене є служба Windows, яка несподівано закривається кожні кілька днів. Чи є простий спосіб відстежити його, щоб переконатися, що він швидко перезапуститься, якщо він вийде з ладу?

Відповіді:


77

У додатку Послуги виберіть властивості відповідної послуги.

Перегляньте вкладку відновлення - є всілякі варіанти - я б встановив Перший та Другий невдалі перезапустити службу, по-третє, запустити пакетну програму, яка BLAT висилає електронний лист із третім повідомленням про помилку.

Ви також повинні встановити значення Скидання відмов на 1, щоб щодня скидати кількість відмов.

Редагувати:

Схоже, це можна зробити за допомогою командного рядка:

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

Ваш файл MyBatchFile.CMD може виглядати так:

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

3
Усі добрі речі, але +1, особливо для поштових повідомлень електронної пошти та матеріалів командного рядка.
Максим Мінімус

Де повинен містити пакетний файл на диску?
Метт

Куди завгодно. З SC failure w3svc command= "MyBatchFile.cmd"ним має бути шлях або C: \ Windows \ System32. Ви можете помістити його в будь-який каталог, якщо ви використовуєте повний шлях, тобтоSC failure w3svc command= "c:\Stuff\MyBatchFile.cmd"
Christopher_G_Lewis

9

Відкрийте Services.msc, двічі клацніть на службі, щоб відкрити Властивості послуги, є вкладка Відновлення, і ці налаштування повинні дозволяти вам перезапустити службу після відмови.


4

Спробуйте встановити час відновлення на нуль:

введіть тут опис зображення

Еквівалент командного рядка:

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

У будь-якому випадку іноді автоматичне відновлення не працює належним чином, і рекомендується використовувати програмне забезпечення сторонніх виробників. Здається, коли сервіс виходить вишукано з кодом виходу 0 вікон, не намагайтеся його відновити.


1

Я використовую ServiceKeeper на своєму сервері Windows 2008 на HostForLife.eu, і він працює дуже добре. Раніше я мав огляд на ServiceHawk, але я вважаю за краще використовувати ServiceKeeper для його легшого управління та інтерфейсу.


1

У мене була схожа вимога запустити послугу, якщо її зупинили. Найпростішим рішенням, на який я думав, було виконання команди нижче в планувальнику завдань Windows кожні 5 хвилин:

чистий старт MyServiceName

Ця команда в основному запустить послугу (якщо її зупинено) і не матиме ефекту, якщо служба вже запущена.


1

Нещодавно я реалізував опцію відновлення для запуску скрипта повноважень, який намагається перезапустити службу певну кількість разів та надсилає сповіщення електронною поштою після закінчення.

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

Програма: 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 'Ім'я послуги'}"

** Аргументи $ - це параметри, які будуть передані вашому сценарію. Вони не потрібні.

ось сценарій повноважень:

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

Це була моя відповідь на подібній темі. Сподіваюся, це допомагає ...

Ви можете запланувати простий скрипт vbs на зразок цього, щоб періодично перезапускати послугу на комп'ютері, якщо це необхідно.

strComputer = "." 
strSvcName = "YOUR_SERVICE_NAME" 
встановити objWMI = GetObject ("winmgmts: \\" & strComputer & "\ root \ cimv2")
встановити objService = objWMI.Get ("Win32_Service.Name = '" & strSvcName & "'")
Якщо objService.State = "Зупинено" Потім
    objService.StartService ()
Кінець Якщо



0

Хтось задав подібне запитання у Super User: Ви можете встановити інструмент, який відстежує служби Windows. Щось на кшталт Service Hawk допоможе вам продовжувати послуги, або дозволить запланувати автоматичний перезапуск (можливо, протягом ночі), щоб безперебійно працювати сервіс.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.