В целях тестирования у меня есть служба Windows, которую я хотел бы перезапустить через 1 секунду после первой и 5 секунд после второй ошибки. Каждый последующий сбой в течение 2 минут должен останавливать обслуживание. Чтобы выполнить этот критерий, я попытался использовать конфигурацию «Сбросить счетчик сбоев после», но безуспешно. На своей машине (Windows7 Enterpise x64) я создал простую службу, которая неожиданно закрывается через 5 секунд после запуска. С конфигурацией:
sc failure FAIL1 reset= 120 actions= restart/1000/restart/5000//
Я ожидал, что после этих двух минут счетчик сбоев службы будет сброшен, и последовательность перезапуска будет повторяться. Но, возможно, когда сервис останется в остановленном состоянии после второго сбоя, у него никогда не будет возможности сбросить счетчик. Итак, у меня есть еще один сервис с настройкой:
sc failure FAIL2 reset= 120 actions= restart/1000/restart/5000
Оказывается, служба FAIL2 после второго сбоя продолжает перезапускаться через 5 секунд, а доступный счетчик сброса в сообщениях об ошибках журнала событий все еще растет.
Используя третью службу (FAIL3), я попытался настроить параметры simlar, используя доступное разрешение на вкладке Recovery свойств службы:
Этот ведет себя аналогично FAIL1. Выполняется дважды и после одних суток останавливается.
Похоже, на моем компьютере тайм-аут сброса счетчика не работает. Возможно, мою воображаемую конфигурацию невозможно реализовать с помощью этой техники. Или, может быть, мое понимание счетчика сброса неверно.
Мое понимание счетчика служб Windows было совершенно неверным. Здесь самое главное:
Сбросить счетчик сбоев после настройка - это количество времени с начала службы после чего счетчик отказов будет сброшен.
В соответствии с определенными примерными конфигурациями, где каждая служба неожиданно закрывается через 5 секунд после запуска, каждый случай никогда не достигает определения счетчика сброса. Для сброса счетчика тайм-аут должен быть меньше 5 с, например.
sc failure FAIL1 reset= 3 actions= restart/1000/restart/5000/restart/10000
В результате у нас есть служба, которая постоянно перезапускается через 1 секунду, и каждое сообщение об ошибке журнала событий содержит информацию:
Он сделал это 1 раз (а)
Идея, при которой 2 сбоя службы должны привести к остановке службы в течение 2 минут, невозможна таким образом. Все, что мы можем сделать, это установить счетчик сброса более 5 секунд и каждый последующий сбой в течение 2 минут перезапускается:
sc failure FAIL1 reset= 10 actions= restart/1000/restart/5000/restart/1200000