2013-11-26 7 views
6

У меня есть сервер-разработчик, который часто меняю коды кода на Git. После каждого нажатия мне нужно вручную войти в сервер и перезапустить процессы диспетчера.Есть ли способ автоматически перезагрузить процессы Supervisor?

Есть ли способ, чтобы Супервизор контролировал каталог файловой системы для изменений и перезагружал процесс (ы) на изменения?

ответ

5

Вы должны иметь возможность использовать Event Listener, который контролирует файловую систему (возможно, watchdog) и испускает перезапуск с использованием XML-RPC API. Отъезд memmon прослушиватель из пакета superlance для вдохновения. Это не должно быть так сложно. И поскольку сторожевой таймер вызовет вашу процедуру перезапуска, вам не нужно читать события, используя childutils.listener.wait.

В качестве альтернативы, крючки git могут сделать трюк, если разрешения правильны для доступа к API супервизора (разрешения сокетов, HTTP-пароли). Простой, но менее безопасный подход.

Простой и даже менее безопасный подход заключается в том, чтобы разрешить вам выдавать supervisorctl restart. Управляемый пользователь должен соответствовать вашему пользователю push (или git или www, в зависимости от того, как вы его настроили). У Лота есть способы, чтобы это пошло не так безопасно. Но для развития, возможно, все будет хорошо.

Похожие:

+6

Итак, это не решение, скорее как «как создать решение». Итак, теперь, почти через 3 года, до сих пор нет реального решения того, что может показаться мне чрезвычайно распространенной проблемой? – hackel

5

я также не нашел решение, так что я пытался сделать мои собственные. Here it is.

Вы можете установить пакет с помощью этой команды:

pip install git+https://github.com/stavinsky/supervisord-touch-reload.git 

(я добавлю его к PyPI после добавления некоторых тестов.)

В качестве примера настройки супервизора, расположенный в папке примеров в GitHub. Думаю, документация будет очень скоро. В основном все, что вам нужно, чтобы начать использовать этот модуль добавить слушателя событий с command как:

python -m touch_reload --socket unix:///tmp/supervisor.sock --file <path/to file file> --program <program name>

где file является файл, который будет контролироваться с абсолютной или относительной directory пути, socket это сокет из supervisorctl раздел и program - это название программы от [program:<name>] определение раздела. Также доступны --username и --password, которые вы можете использовать, если у вас есть настраиваемая конфигурация диспетчера.

+1

Спасибо, что опубликовали это. Кажется, хорошо работает. Странно, что нет встроенного решения для чего-то подобного – edwardmp

+0

Добро пожаловать. Рад узнать, что это было полезно для кого-то.Если у вас возникнут какие-либо проблемы или идеи, как улучшить этот сценарий, напишите мне здесь или на github. – Stavinsky

+0

Это решение контролирует только один файл за раз? https://github.com/gorakhargosh/watchdog позволит вам смотреть весь каталог. –

1

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

Смежные вопросы