Супервайзер поддерживает Huey Python
Я пытаюсь заставить супервизора контролировать и поддерживать скрипт на python, который использует Huey (очередь типа redis).
мой конфиг программы Supervisor выглядит так:
[program:smsbot_handler]
directory=/home/ubuntu/virt_env/virt1/app/
command=/home/ubuntu/virt_env/virt1/bin/huey_consumer.py main.huey --threads=3
stdout_logfile=/home/ubuntu/smsbot_handler_log.txt
autostart=true
autorestart=true
environment=PYTHONPATH="/home/ubuntu/virt_env/virt1/app:$PYTHONPATH"
redirect_stderr=true
Кто-нибудь может дать мне какие-нибудь подсказки, почему это не работает? Все, что я получаю в своем лог-файле:
Error importing main.huey
Это действительно начинает доходить до меня!
1 ответ
Предположим, что вы уже проверили, что ваша команда работает нормально, когда она не запускается из супервизора, я бы удалил строку среды, вместо этого запустил скрипт оболочки, установил среду и запустил huey_consumer.py из скрипта оболочки (используя exec python).
Это то, что я делаю со всеми моими программами, которые требуют определенной среды под наблюдением.
Вот пример:
В конфигурации супервизора:
[program:MyExample]
command=/ama/nms/MyExample/supervisor_myexample.sh
process_name=%(program_name)s ; process_name expr (default %(program_name)s)
numprocs=1 ; number of processes copies to start (def 1)
directory=/ama/nms/MyExample ; directory to cwd to before exec (def no cwd)
priority=10 ; the relative start priority (default 999)
autostart=true ; start at supervisord start (default: true)
autorestart=true ; retstart at unexpected quit (default: true)
startsecs=1 ; number of secs prog must stay running (def. 1)
startretries=10 ; max # of serial start failures (default 3)
exitcodes=0,2 ; 'expected' exit codes for process (default 0,2)
stopsignal=TERM ; signal used to kill process (default TERM)
stopwaitsecs=10 ; max num secs to wait b4 SIGKILL (default 10)
В файле /ama/nms/MyExample/supervisor_myexample.sh:
#!/bin/sh
# ------------------------------------------
# Set the environment
export LD_LIBRARY_PATH=<...>:$LD_LIBRARY_PATH
export PYTHONPATH=<...>:$PYTHONPATH
D=`dirname $0`
exec python $D/myexample.py arg1 arg2 arg3
Ключевым моментом является запуск команды с использованием exec, чтобы супервизор мог отслеживать pid команды, которая запускается.