Я пишу прослушиватель событий супервизора, который может отправлять события состояния процесса в очередь для дальнейшей обработки. Слушатель событий написан на 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 или чем-то в этом роде, но мои знания на этой глубине ограничены. Был бы признателен за любую помощь.