Ответы:
Под приложением Службы выберите свойства рассматриваемой службы.
Посмотрите вкладку восстановления - есть все виды опций - я бы установил First & Second Failure для перезапуска службы, Third для запуска пакетной программы, которая BLAT отправляет электронное письмо с третьим уведомлением об ошибке .
Вы также должны установить Reset Fail Count на 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 минут:
net start MyServiceName
Эта команда в основном запускает службу (если она остановлена) и не имеет никакого эффекта, если служба уже запущена.
Недавно я реализовал опцию восстановления для запуска сценария powershell, который пытается перезапустить службу определенное количество раз и отправляет уведомление по электронной почте, а также.
После нескольких попыток (и несмотря на все другие вещи, которые я видел), конфигурация полей на вкладке восстановления в сервисах выглядит следующим образом:
Программа: Powershell.exe
** Не C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ Powershell.exe
Параметры командной строки: -команда "& {SomePath \ YourScript.ps1 '$ args [0]' '$ args [1]' '$ args [n]'}"
например: -команда "& {C: \ PowershellScripts \ ServicesRecovery.ps1 'Имя службы'}"
** $ 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
Это был мой ответ на похожую тему. Надеюсь, это поможет ...
Вы можете запланировать простой скрипт VBS, как этот, чтобы периодически перезапускать службу на компьютере, если это необходимо.
strComputer = "." strSvcName = "YOUR_SERVICE_NAME" set objWMI = GetObject ("winmgmts: \\" & strComputer & "\ root \ cimv2") set objService = objWMI.Get ("Win32_Service.Name = '" & strSvcName & "'") Если objService.State = "Stopped", то objService.StartService () End If
Кто-то задал похожий вопрос в Super User: вы можете установить инструмент, который контролирует службы Windows. Что-то вроде Service Hawk поможет вам запустить службы или позволит запланировать автоматический перезапуск (возможно, ночью) для обеспечения бесперебойной работы службы.