У нас есть около десятка служб Windows, разработанных как собственными силами, так и сторонних производителей, и мы предъявляем следующие требования для управления ими:
Эти требования кажутся довольно простыми, но я не нашел простого способа удовлетворить их с помощью встроенных функций Windows или простых и доступных сторонних инструментов. Неужто это проблема решенная ?! Я ожидал сразу найти какой-нибудь инструмент с открытым исходным кодом, чтобы сделать именно это.
Необязательное «необычное» требование: - Осведомленность о ручном вмешательстве, чтобы инструмент не мешал ручным действиям. например Возможность останавливать и запускать службы в интерактивном режиме с помощью того же инструмента, который выполняет мониторинг, и / или возможность уведомлять инструмент о ручном вмешательстве.
Любые идеи приветствуются.
Предложения RobM и HopelessN00b хороши, если вы хотите придерживаться инструментов Windows (за исключением отправки по электронной почте с помощью blat.exe, который на самом деле является отличной электронной почтой smtp из командной строки).
Поскольку вы упомянули интерес к сторонней утилите, наше (бесплатное) программное обеспечение для мониторинга СобытиеSentry Light должен соответствовать всем вашим требованиям - с помощью одного бесплатного программного обеспечения:
Преимущество планировщика приложений заключается в том, что он может фиксировать выходные данные процессов командной строки в журнале событий, поэтому, если перезапуск службы не сработал (по какой-либо причине), вы можете мгновенно получить уведомление со всей командной строкой. вывод.
Если вы хотите останавливать и запускать службы по расписанию, почему бы не использовать Windows, встроенный в планировщик заданий? Он прекрасно справляется с такими задачами - он может запускать команду, и вы можете просто использовать ее с пакетными заданиями, предназначенными для запуска и остановки служб.
Что касается служб мониторинга - опять же, вы можете использовать опцию восстановления в самой службе - выберите «запустить программу» и используйте ее для запуска пакетного задания, которое отправляет уведомление по электронной почте (через что-то вроде блат если вы хотите упростить), а затем перезапустите службу.
Для мониторинга: есть встроенная функция, загляните во вкладку «Восстановление» при нажатии на свойства службы в services.msc
. Вы можете «Запустить программу», если служба не работает, эта программа может быть, например, сценарием для отправки электронного письма. Существуют также десятки решений для мониторинга сети, которые могут отслеживать службы Windows, Nagios, PRTG, OpenNMS и многие другие.
Как было предложено @RobM, вы можете обеспечить базовые функции мониторинга и восстановления через вкладку свойств службы, хотя, по моему опыту, это имеет тенденцию плохо масштабироваться на большом количестве серверов или служб и более ограничено, чем хотелось бы. Если ваши потребности выходят за рамки этого базового инструмента, вы можете лицензировать любое количество пакетов мониторинга, или, если стоимость является фактором, довольно просто развернуть свои собственные сценарии мониторинга.
Если у вас больше опыта работы с * nix, вам может быть проще использовать SNMP для мониторинга и управления службами, хотя родным вариантом является WMI (инструментарий управления Windows) и командная строка. WMIC (команда инструментария управления Windows), который очень эффективен, если вы научитесь его использовать.
Например ... вы можете получить список служб на целевом компьютере с помощью: WMIC /node:[hostname] SERVICE LIST
вывести список запущенных служб с:
WMIC SERVICE where (state=”running”) GET caption, name, state > services.tsv
и запустите службу telnet с помощью:
WMIC SERVICE where caption='TELNET' CALL STARTSERVICE
.
Немного логики в выбранном вами языке сценариев, и вы можете отправлять оповещения по электронной почте, когда конкретная служба не работает, запускать, останавливать или перезапускать службы по расписанию и удовлетворять всем остальным требованиям. Лучше всего то, что он родной, и единственный инструмент, который вам нужен, - это интерфейс командной строки Windows (работают и cmd, и Powershell) и очень мало навыков написания сценариев.
Этот сценарий PowerShell отслеживает, когда службы Windows запускаются и останавливаются:
$services = @{};
while ($true)
{
foreach ($service in @(Get-Service))
{
$oldStatus = $services[$service.Name];
$newStatus = $service.Status;
if (!$oldStatus)
{
echo "$newStatus $($service.Name) ($($service.DisplayName))"
}
elseif ($oldStatus -ne $newStatus)
{
echo "$oldStatus -> $newStatus $($service.Name) ($($service.DisplayName))"
}
$services[$service.Name] = $newStatus;
}
Start-Sleep 1
}
Пример вывода:
Stopped AarSvc_e22aba (Agent Activation Runtime_e22aba)
Stopped AJRouter (AllJoyn Router Service)
Stopped ALG (Application Layer Gateway Service)
Running AMD External Events Utility (AMD External Events Utility)
...
Stopped XblAuthManager (Xbox Live Auth Manager)
Stopped XblGameSave (Xbox Live Game Save)
Stopped XboxGipSvc (Xbox Accessory Management Service)
Stopped XboxNetApiSvc (Xbox Live Networking Service)
Running -> Stopped camsvc (Capability Access Manager Service)
Stopped -> Running camsvc (Capability Access Manager Service)
Stopped -> Running ClipSVC (Client License Service (ClipSVC))
Running -> Stopped camsvc (Capability Access Manager Service)
Running -> Stopped ClipSVC (Client License Service (ClipSVC))
Running -> Stopped AppXSvc (AppX Deployment Service (AppXSVC))
Stopped -> Running AppXSvc (AppX Deployment Service (AppXSVC))
Stopped -> Running ClipSVC (Client License Service (ClipSVC))
Stopped -> Running WerSvc (Windows Error Reporting Service)