Я настраиваю BuildBot worker на виртуальной машине Windows Server 2016 Datacenter Edition, работающей в Azure. Это будет сборка нашего продукта для Windows с использованием компилятора Visual Studio C ++.
Я дошел до того, что рабочий установлен и работает в сеансе административного рабочего стола. Он подключается к нашему главному серверу сборки и, судя по результатам тестовых сборок, может получить доступ ко всем необходимым инструментам и службам.
Я работал над тем, чтобы рабочий запускался как служба. Это позволит автоматически запускать воркер от имени непривилегированного пользователя.
Только вот ... служба не запускается. Когда я смотрю в журнал событий, я вижу две ошибки в «Журналы Windows → Система»:
ID события: 7000
Не удалось запустить службу BuildBot из-за следующей ошибки: служба не ответила на запрос запуска или управления своевременно.
Идентификатор события: 7009
Истекло время ожидания (30000 миллисекунд) при ожидании подключения службы BuildBot
Никаких событий от самого BuildBot не регистрируется в «Журналы Windows → Приложение», и эти события регистрируются (и служба регистрируется как сбойная) сразу же при попытке ее запуска.
В настоящее время служба настроена на работу как «LocalSystem» (позже я планировал ограничить права доступа). Насколько я понимаю, «LocalSystem» должна иметь доступ ко всем локальным ресурсам, поэтому я не думаю, что разрешения файловой системы могут вызывать эту проблему.
Существуют ли какие-либо часто встречающиеся причины подобного сбоя сервисов?
Есть ли другие журналы или диагностическая информация, на которые мне следует обратить внимание?
Какие еще шаги я могу предпринять, чтобы определить причину этого сбоя?
Изменить: эта проблема воспроизводима даже с использованием простой службы тестирования, представленной в этот ответ на переполнение стека.
Проблема оказалась в незарегистрированных DLL. В частности, поддержка службы Python, предоставляемая pywin32, требует, чтобы определенные библиотеки DLL были доступны для взаимодействия с Win32 API. Эти библиотеки DLL должны быть установлены автоматически при установке pywin32 с помощью:
pip install pypiwin32
Как упоминалось в этот ответ на переполнение стека, правильным исправлением в этом случае было запустить:
python C:\Python27\Scripts\pywin32_postinstall.py install
Это решило мою проблему.