У меня есть служба Windows, которая неожиданно выходит каждые несколько дней. Есть ли простой способ следить за тем, чтобы он быстро перезагружался в случае сбоя?
Под приложением Службы выберите свойства рассматриваемой службы.
Посмотрите вкладку восстановления - есть все виды опций - я бы установил первый и второй сбой для перезапуска службы, третий - для запуска пакетной программы, которая [~ ~ ~] blat [~ # ~] вышло письмо с уведомлением о третьем сбое.
Вы также должны установить Reset Fail Count на 1, чтобы ежедневно сбрасывать счетчик ошибок.
EDIT:
Похоже, вы можете сделать это через командную строку:
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 [email protected] -server SMTP.Example.com -f [email protected]
Откройте Services.msc, дважды щелкните сервис, чтобы открыть Свойства сервиса, есть вкладка Восстановление, и эти настройки должны позволить вам перезапустить сервис в случае сбоя.
Попробуйте установить время восстановления на ноль:
Эквивалент командной строки:
SC failure YOUR_SERVICE_NAME reset= 0 actions= restart/0/restart/0/restart/0
В любом случае, иногда автоматическое восстановление работает некорректно, поэтому рекомендуется использовать стороннее программное обеспечение. Кажется, что когда сервис завершает работу изящно с кодом завершения 0 окон, не пытается восстановить его.
У меня было аналогичное требование для запуска службы, если она остановлена. Я подумал, что самое простое решение - выполнять указанную ниже команду в планировщике задач Windows каждые 5 минут:
net start MyServiceName
Эта команда в основном запускает службу (если она остановлена) и не имеет никакого эффекта, если служба уже запущена.
Я использую ServiceKeeper на моем сервере Windows 2008 на HostForLife.eu, и он работает очень хорошо. Ранее у меня был обзор ServiceHawk, но я предпочитаю использовать ServiceKeeper для более простого управления и интерфейса.
Недавно я реализовал опцию восстановления для запуска сценария 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 = "[email protected]"
$FromAddress = "[email protected]"
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 = "[email protected]"
$FromAddress = "[email protected]"
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
Кто-то задавал аналогичный вопрос в Super User: вы можете установить инструмент, который контролирует службы Windows. Что-то вроде Service Hawk поможет вам запустить службы или позволит запланировать автоматический перезапуск (возможно, ночью) для обеспечения бесперебойной работы службы.
Это был мой ответ на аналогичный тема Надеюсь, это поможет ...
Вы можете запланировать простой скрипт 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 "Тогда ObjService.StartService () End If