Прослушиватель событий супервизора в подоболочке

Я пишу прослушиватель событий супервизора, который может отправлять события состояния процесса в очередь для дальнейшей обработки. Слушатель событий написан на Python, назовем его handler.py. У меня есть внутренняя система сборки и выпуска для Python, которая позволяет мне создавать виртуальные среды перед выполнением сценариев Python с любого из моих серверов с помощью вездесущего сценария bash (называемого launcher.sh), который по сути выглядит следующим образом.

...
create virtualenv
activate virtualenv
python -m main_module

Затем я настраиваю прослушиватель событий в моем экземпляре супервизора следующим образом:

[eventlistener:feedback]
command = launcher.sh handler.py
events=PROCESS_STATE

Я вижу, как обработчик выводит READY\n на стандартный вывод, но ни одно из событий не распространяется на него, и в конечном итоге супервизор начинает жаловаться на переполнение буфера событий. Если я затем изменю конфигурацию прослушивателя событий для прямого вызова python, вот так, все оживет.

[eventlistener:feedback]
command = <path to virtualenv>/bin/python handler.py
events=PROCESS_STATE

Единственное, что я пробовал, это вызвать python с помощью exec внутри launcher.sh, и я вижу, что ни один подпроцесс не создается таким образом, но он все еще не работает. Мне интересно, связано ли это с буферизацией записей stdout или чем-то в этом роде, но мои знания на этой глубине ограничены. Был бы признателен за любую помощь.


person kch    schedule 30.09.2015    source источник


Ответы (1)


Чтобы ответить на мой собственный вопрос, прочитав код супервизора, оказалось, что он проверяет stdout_text.startswith('READY'), поэтому мне просто нужно было убедиться, что мой сценарий launcher.sh ничего не распечатывает перед запуском обработчика событий.

person kch    schedule 22.10.2015