2013-11-22 3 views
1

У меня есть служба Windows, которая вызывает хранимый proc снова и снова (в бесконечном цикле).Как обеспечить постоянный запуск процесса обслуживания Windows?

код выглядит следующим образом:

while(1) 
{ 
    callStoredProc(); 
    doSomethingWithResults(); 
} 

Однако, как там могут быть случаи, когда цикл застревает без ответа, но сервис все еще технически работает.

Я полагаю, что есть инструменты для мониторинга работоспособности службы, чтобы команды операций знали, чтобы перезапустить ее.

Но для моего сценария это не поможет, так как служба будет по-прежнему технически работать, но она застряла и не может продолжаться.

Каков наилучший способ, чтобы этот процесс перезапустился, если этот сценарий произошел?

Будет ли решение использовать планировщик задач, который проверяет на это пульс этого процесса и перезапускает сервис, если в течение некоторого времени нет пульса? Чтобы иметь другой отдельный поток, который отслеживает ход первого процесса?

+0

Да. Вам нужен цикл, чтобы иметь сердечный ритм. –

ответ

2

Службы Windows имеют различные recovery options, которые позаботились о вопросе 1. Для вопроса 2 лучшим вариантом было бы использовать тайм-аут, в соответствии с которым, если услуга занимает больше Х-времени, чтобы завершить ее, она перезапускает или останавливает то, что она делает (Я не знаю, характер вашей службы, поэтому не может обеспечить детали реализации).

Идея сердцебиения также будет работать, однако, это просто становится еще вещь для управления/обслуживания & установить.

+0

Если у меня есть тайм-аут, как мне сделать автоматическую перезагрузку автоматически с кодом без вмешательства человека? Должен ли я по-прежнему вызывать ошибку, а в моих вариантах восстановления - перезапустить службы, если есть ошибка? –

+0

@HenleyChiu один вариант заключается в том, чтобы отключить код в другом потоке и иметь тайм-аут на этом (существуют разные способы его реализации), и если истечет время ожидания, принудительно перезапустите службу. – James

+0

как заставить службу перезапускать? Бросив ошибку? –

Смежные вопросы