Почему этот сервис Python останавливается сам по себе, несмотря на бесконечный цикл? - PullRequest
1 голос
/ 15 октября 2010

Мне удалось установить скрипт Python в качестве службы, используя этот рецепт в ActiveState: win-services-helper.

Чтобы извлечь из него много пользы, я включил бизнес-конецмоей программы, заменив строки 99 - 100:

 95   class Test(Service):
 96       def start(self):
 97           self.runflag=True
 98           while self.runflag:
 99               # My logging script
100               # goes here
101        def stop(self):
102            self.runflag=False
103            self.log("I'm done")
105
106    instart(Test, 'aTest', 'Python Service Test')

Моя проблема в том, что служба регистрирует только одну запись, а затем останавливается сама.Затем я перехожу к services.msc, пытаюсь снова запустить службу, затем Windows отображает это сообщение:

Служба тестирования службы Python на локальном компьютере запускается, а затем останавливается.Некоторые службы автоматически останавливаются, когда у них нет работы, например, служба «Журналы и оповещения производительности».

Почему мой сервис считает, что ему нечего делать, когда я поместил его вбесконечный цикл? Он должен останавливаться только тогда, когда я выключаю компьютер и снова начинаю работать при следующем включении компьютера, даже если никто не входит в систему.

ПРИМЕЧАНИЕ: MyСценарий регистрации использует простой файл для чтения / записи в csv.Он не использует какие-либо необычные модули регистрации.

Ответы [ 3 ]

2 голосов
/ 15 октября 2010

Я считаю, что это сообщение появляется также при возникновении ошибки. Не исключено, что пользователь, запустивший службу, не имеет прав на запись в файл журнала. Вы можете попытаться создать этот CSV-файл и настроить права доступа, чтобы «Все» могли писать в него.

1 голос
/ 22 октября 2010

Теперь работает. Спасибо всем за идеи!

Рецепт состоял из двух сценариев:

  • winservice.py
  • winservice_test.py

В моей предыдущей попытке я выделил несколько строк, которые мне показались полезными. Я мог пропустить некоторые из них, поэтому это не сработало.

Я оставил winservice.py как есть . Для бизнес-конца моего сценария я поместил его в структуру цикла в winservice_test.py.

После написания кода я пошел в командную строку, просмотрел, где хранились два скрипта, затем установил службу с

python winservice_test.py

Мой сервис теперь доступен через services.msc. По умолчанию он работает как Локальная системная учетная запись , что создает проблемы при выходе из системы. Служба все еще будет работать, но остановится, потому что у учетной записи нет прав на запись в папку журнала.

Я изменил Свойства , чтобы он работал с моей учетной записью пользователя (у которой есть доступ на запись в папку журнала). Мой сервис теперь выживает при выходе из системы, перестает работать только после завершения работы, а также запускается сам, как только Windows загружается, даже если никто не входит в систему.

0 голосов
/ 15 октября 2010

Вам нужно видеть весь код при определении остановки службы, и вы можете использовать другие инструменты, такие как python, для управления вашими кодами.

...