Я поддерживаю приложение, которое использует две службы Windows для выполнения двух очень разных задач. Один контролирует выполнение приложения по расписанию, другой работает постоянно, прослушивая сообщения HL7, передаваемые через определенный порт. Оба они имеют склонность к неудачам. Мы определили, что вероятной причиной сбоев являются сбойные подключения к серверам баз данных, сетевым ресурсам и т.п., и в большинстве случаев службы перезапускаются без проблем. Проблема в том, что иногда службы перестают работать, но продолжают отображать статус «Выполняется» в диспетчере служб Windows. и если вы используете запрос из командной строки службы. Только тогда, когда вы затем активно пытаетесь остановить и перезапустить службу, вы понимаете, что служба остановлена, так как при попытке остановить ее из консоли диспетчера служб истекает время ожидания и возвращается общее сообщение «Служба не отвечает вовремя». сообщение. Затем вам нужно убить поток процесса, в котором он работает, чтобы остановить его.
Я хотел бы знать две вещи: Первое: есть ли способ мониторинга служб, который мог бы возвращать больше информации, чем просто сообщенный статус службы? Открыт для сторонних вариантов.
Два: можно ли использовать параметры восстановления службы Windows по умолчанию для выполнения запланированного перезапуска службы, которая будет работать через тайм-аут и сообщение об ошибке при попытке остановить службу, если она находится в состоянии неправильного отчета?
Извиняюсь за многословность. Пытаясь сбалансировать как можно больше полезной информации, я потратил на это часы, потраченные на болтовню.
Я бы посоветовал установить «автоматический перезапуск службы» в свойствах службы или в случае, если необходимая служба возвращает событие в средство просмотра событий. Вы можете создать запланированную задачу, которая будет запускаться по определенному идентификатору события, а затем перезапустить службу.
Таким образом, служба по-прежнему отображается как работающая, но не выполняет нормальные функции, которые должны быть .... Попробуйте использовать монитор производительности, чтобы увидеть, есть ли один из process
счетчики этой услуги выходят из строя, когда она перестает нормально работать. Если вы можете найти данные о производительности, указывающие на неисправность службы:
data collector
типа performance counter alert
в perfmon, чтобы цикл службы при достижении этого порога. С точки зрения реакции, этот вариант скорее волосяной. Например, если вы хотите подождать превышения порога, скажем, по крайней мере 1 минуту, прежде чем перезапускать службу, это не лучший вариант. Если это не проблема, см. Как я могу отслеживать использование памяти для JVM на базе Windows и запускать предупреждение, если оно становится слишком высоким?Get-Counter -maxSamples 999 -sampleInterval 999 -counter XXX
чтобы обойти природу первого триггера.Nagios Core - это бесплатный инструмент, который можно использовать для мониторинга служб Windows и может автоматически перезапускать службы в случае сбоя. У них также есть платный продукт (Nagios XI), который отлично подходит для больших сред.
Здесь вы можете найти презентацию и ссылку для скачивания: https://www.nagios.com/solutions/windows-service-monitoring/
Пример использования обработчика событий для запуска процесса можно найти здесь: https://assets.nagios.com/downloads/nagioscore/docs/nagioscore/3/en/eventhandlers.html