Подтвердить что ты не робот

Есть ли аналог Windows для супервизора?

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

4b9b3361

Ответ 1

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

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

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

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

  • Теперь вы, вероятно, захотите установить 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"
    
  • Перейдите к диспетчеру службы Windows и запустите только что установленный диспетчер служб.

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

Ответ 2

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

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

Ответ 3

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

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

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

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

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

Итак, на данный момент служба Windows может стать вашим лучшим краткосрочным вариантом.

Ответ 4

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

Ответ 5

Нет, диспетчер не поддерживается в Windows.

НО, что вы можете сделать, это автоматически перезапустить его из сценария оболочки:

#!/usr/bin/python
from subprocess import Popen

file_path = " script_to_be_restarted.py"
args_as_str = " --arg1=woop --arg2=woop"

while True:
    print("(Re-)Start script %s %s" % (file_path, args_as_str))
    p = Popen("python " + file_path + args_as_str, shell=True)
    p.wait()