Для ясности, я отвечаю на свой вопрос, указав на особенности того, что вызвало это, и как мы его исправили, это может быть не лучший ответ, поскольку он фокусируется на конкретной причине c и не детализирует механизмы участвует в сообщении об ошибках (или нет) служб windows, или лучший метод их отладки.
Что мы обнаружили
В отличие от вывода имени службы net start ', на самом деле произошла какая-то ошибка, но об этом не было сообщено (или возвращено).
Мы решили проблему в нашем коде (и хорошее практическое правило в моей книге состоит в том, что большую часть времени плохое поведение вашего кода является вашей собственной ошибкой, а не чужой xD) с помощью старого доброго журнала инструкции, вставленные в код, чтобы показать, как далеко мы продвинулись в нашей программе до тех пор, пока не прекратилось ведение журнала. Это была настоящая проблема, мы не могли сказать, где именно в нашей кодовой базе была проблема. К счастью, это было в первых 100 строках или около того.
Вот часть кода, который мы обнаружили, что не удалось.
#Setup signal handling
signal.signal(signal.SIGTERM, self.handle_signal)
После того, как мы удалили регистрацию обработчика сигналов для SIGTERM, служба отлично работала с использованием команды net start.
Также в другом модуле мы обнаружили ту же проблему с
atexit.register(self.shutdown)
Обработчики для обеих этих ситуаций закрывают сетевые сокеты и уничтожают экземпляры модуля регистрации python. Удаление вызовов для регистрации этих обработчиков в обоих случаях устранило нашу проблему и позволило службам работать.
Итак, в нашем случае у нас есть решение нашей проблемы, но не ответ на главный вопрос, почему это произошло . Мы можем только предположить, что либо windows выдает ошибку, потому что он не поддерживает наш модуль, регистрирующий свои собственные обработчики сигналов, либо существует проблема с функциями, вызываемыми в наших обработчиках.
Второй вариант кажется маловероятным, поскольку эти обработчики работали в производстве годами. Первый вариант кажется правдоподобным, поскольку потенциально обработчик сигнала может заблокировать попытку остановить службу, никогда не вернувшись, возможно, MS это не нравится. Не уверен.
Таким образом, если вы пишете службу в windows и используете python, остерегайтесь использования обработки сигналов, так как это привело к сбою нашего кода без указания того, где возникла проблема и в результате во время простоя, пока мы разделили наш код пополам, чтобы найти причину проблемы.
Я надеюсь, что другие, кто лучше понимает внутреннюю механику системы служб windows, прокомментируют или ответят на главный вопрос о том, почему службы не запускаются и не возвращают ошибку.