Есть ли Windows аналог Supervisord? - PullRequest
       31

Есть ли Windows аналог Supervisord?

23 голосов
/ 03 октября 2011

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

Ответы [ 4 ]

38 голосов
/ 03 августа 2013

Несмотря на большой отказ от ответственности здесь , вы можете запустить Supervisor с Cygwin в Windows; оказывается, что Cygwin прошел долгий путь для имитации среды Posix, настолько хорошо, что фактически supervisord работает без изменений. Нет необходимости изучать новый инструмент, и вы даже сэкономите немало работы, если вам потребуется развернуть сложный проект на нескольких платформах.

Вот мой рецепт:

  1. Если вы еще этого не сделали, установите Cygwin. В процессе установки выберите Python.
  2. С терминала Cygwin установите virtualenv как обычно.
  3. Создайте virtualenv для супервизора, а затем установите как обычно:

    pip install supervisord
    
  4. Настройте супервизор обычным способом. Помните, что supervisord будет работать с Cygwin, поэтому вам лучше использовать пути Cygwin (C: \ myservers \ project1 переводится в / cygdrive / c / myservers / project1 в Cygwin).

  5. Теперь вы, вероятно, хотите установить supervisord как сервис. Вот как я это делаю:

    cygrunsrv --install supervisord --path /home/Administrator/supervisor/venv/bin/python --args "/home/Administrator/supervisor/venv/bin/supervisord -n -c /home/Administrator/supervisor/supervisord.conf"
    
  6. Перейдите в диспетчер служб Windows и запустите диспетчер службы, который вы только что установили.

Пункт 5 устанавливает supervisord в качестве службы Windows, чтобы вы могли управлять им (запуск / остановка / перезапуск) из диспетчера служб Windows. Но то, что вы можете сделать с supervisorctl, работает как обычно, это означает, что вы можете просто развернуть свой старый файл конфигурации.

9 голосов
/ 03 октября 2011

Вы, вероятно, хотите запустить свой скрипт как Windows Service. Для этого вам понадобится библиотека python-win32 . Этот вопрос содержит хорошее описание того, как вы это делаете, а также несколько ссылок на другие связанные ресурсы. Этот вопрос также может быть полезен.

A Windows Service - это то, как вы хотите обернуть любой скрипт, который должен постоянно выполняться в Windows. Их можно настроить для автоматического запуска при загрузке и обработки сбоев. Ничто не помешает кому-либо убить сам процесс, но чтобы справиться с этой потенциальной ситуацией, вы можете просто создать файл bat и использовать команду sc, чтобы узнать, работает ли он, и если нет, перезапустить оказание услуг. Просто запланируйте запуск файла bat каждые 60 секунд (или любой другой сценарий, который может привести к отключению скрипта).

5 голосов
/ 09 февраля 2013

Если вам нужен диспетчер процессов, похожий на супервизор, который работает в большинстве операционных систем posix и основывается на Python, как супервизор, то вам следует обратить внимание на honcho, который является портом мастера Python (на основе Ruby):

http://pypi.python.org/pypi/honcho/

Отлично работает на Mac, Linux, но (на самом деле) еще не Windows ... (редактируя мой первоначальный ответ, где я оптимистично сказал, что он уже работает на Windows на основе запроса на получение, который имеетс тех пор отбрасывается)

Здесь есть форк, обеспечивающий поддержку Windows https://github.com/redpie/honcho, и некоторая работа ведется для поддержки Windows здесь https://github.com/nickstenning/honcho/issues/28 ... по крайней мере, это может стать возможнымрешение в ближайшем будущем.

Здесь также есть форк-мастер для поддержки Windows: https://github.com/ddollar/foreman-windows, который может работать на вас, хотя я никогда не пробовал.

Так что дляТеперь служба Windows может быть вашим лучшим краткосрочным вариантом.

2 голосов
/ 30 сентября 2018

супервизор для windows у нас работал на python27 - 32 бит.Мне пришлось установить pypiwin32 и pywin32 == 223.

...