Відповіді:
У додатку Послуги виберіть властивості відповідної послуги.
Перегляньте вкладку відновлення - є всілякі варіанти - я б встановив Перший та Другий невдалі перезапустити службу, по-третє, запустити пакетну програму, яка 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
SC failure w3svc command= "MyBatchFile.cmd"
ним має бути шлях або C: \ Windows \ System32. Ви можете помістити його в будь-який каталог, якщо ви використовуєте повний шлях, тобтоSC failure w3svc command= "c:\Stuff\MyBatchFile.cmd"
Відкрийте Services.msc, двічі клацніть на службі, щоб відкрити Властивості послуги, є вкладка Відновлення, і ці налаштування повинні дозволяти вам перезапустити службу після відмови.
Спробуйте встановити час відновлення на нуль:
Еквівалент командного рядка:
SC failure YOUR_SERVICE_NAME reset= 0 actions= restart/0/restart/0/restart/0
У будь-якому випадку іноді автоматичне відновлення не працює належним чином, і рекомендується використовувати програмне забезпечення сторонніх виробників. Здається, коли сервіс виходить вишукано з кодом виходу 0 вікон, не намагайтеся його відновити.
Я використовую ServiceKeeper на своєму сервері Windows 2008 на HostForLife.eu, і він працює дуже добре. Раніше я мав огляд на ServiceHawk, але я вважаю за краще використовувати ServiceKeeper для його легшого управління та інтерфейсу.
У мене була схожа вимога запустити послугу, якщо її зупинили. Найпростішим рішенням, на який я думав, було виконання команди нижче в планувальнику завдань Windows кожні 5 хвилин:
чистий старт MyServiceName
Ця команда в основному запустить послугу (якщо її зупинено) і не матиме ефекту, якщо служба вже запущена.
Нещодавно я реалізував опцію відновлення для запуску скрипта повноважень, який намагається перезапустити службу певну кількість разів та надсилає сповіщення електронною поштою після закінчення.
Після декількох спроб (і незважаючи на всі інші речі, які я бачив) Конфігурація полів на вкладці відновлення в службах така:
Програма: 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
Це була моя відповідь на подібній темі. Сподіваюся, це допомагає ...
Ви можете запланувати простий скрипт vbs на зразок цього, щоб періодично перезапускати послугу на комп'ютері, якщо це необхідно.
strComputer = "." strSvcName = "YOUR_SERVICE_NAME" встановити objWMI = GetObject ("winmgmts: \\" & strComputer & "\ root \ cimv2") встановити objService = objWMI.Get ("Win32_Service.Name = '" & strSvcName & "'") Якщо objService.State = "Зупинено" Потім objService.StartService () Кінець Якщо
Хтось задав подібне запитання у Super User: Ви можете встановити інструмент, який відстежує служби Windows. Щось на кшталт Service Hawk допоможе вам продовжувати послуги, або дозволить запланувати автоматичний перезапуск (можливо, протягом ночі), щоб безперебійно працювати сервіс.