У меня есть серверное приложение, работающее на виртуальной машине, размещенной в Azure. Это приложение состоит из четырех служб Windows.
Каждую ночь я выключаю (деинициализирую) виртуальную машину.
Когда я перезагружаю машину, одна из четырех служб не запускается. Обычно это один и тот же.
Если я перезагружу машину, запустятся все четыре службы. Если я остановлю машину (оставив ее подготовленной), а затем запустил ее снова, запустятся все четыре службы. Служба не запускается только тогда, когда машина запускается из деинициализированного запуска.
Я смотрю в журналы событий и вижу следующую ошибку:
Истекло время ожидания (30000 миллисекунд) при ожидании завершения службы. connect
Я попытался настроить параметры службы Recovery таким образом, чтобы она перезапускала службу после сбоя, с отметкой Включить действия для остановок с ошибками: отмечен галочкой. Это не имеет никакого эффекта.
Мой служебный код - это приложение .NET. Я реализовал ведение журнала и записал его в файл, как только он запустится. Когда он не запускается, записи в журнал не записываются. Как будто приложение полностью не загружается.
Есть ли рекомендуемый способ решения этой проблемы? (т.е. чтобы диагностировать основную причину и предотвратить ее возникновение).
Установите тип запуска службы как «Автоматический (отложенный запуск)». Поскольку служба запускает .Net и ничего не регистрирует в течение 30-секундного тайм-аута, ясно указывает, что сборки .Net не загрузились вовремя (холодный старт). К сожалению, у вас нет контроля над этим, поэтому лучше всего отложить его запуск. У меня всегда работал!