Я хотел бы использовать supervisord для выполнения некоторых команд для моего проекта Django, но я продолжаю получать следующую ошибку:
supervisor.log:
2012-05-18 17:52:15,784 INFO spawnerr: can't find command 'source'
Если я удалю команду «source», журнал покажет ту же ошибку: can't find command 'python'
.
Выдержка supervisord.conf:
[program:django]
directory=/home/mf/projects/djangopj/
command=beanstalkd -l 127.0.0.1 -p 11300
command=source /home/mf/virtualenvs/env/bin/activate
command=python manage.py command1
command=python manage.py command2
user=mf
autostart=true
autorestart=true
Я попытался удалить каталог и добавить абсолютный путь к командам, но продолжал получать ту же ошибку.
Я запускаю supervisord с помощью следующей команды:
supervisord -c supervisord.conf -l supervisor.log
В source
команда доступна только в bash
, а команда супервизора выполняется sh
. Я бы рекомендовал использовать скрипт для выполнения ваших команд:
/etc/supervisor/conf.d/my_app.conf
[program:my_app]
command = bash /path/to/app/init.sh
directory = /path/to/app/
user = ubuntu
autostart=true
autorestart=true
/path/to/app/init.sh
#!/bin/bash
beanstalkd -l 127.0.0.1 -p 11300
source /home/mf/virtualenvs/env/bin/activate
python manage.py command1
python manage.py command2
Единственная проблема заключается в том, что супервизор будет контролировать только сценарий, а не команды. Если у вас есть ситуация, когда вы хотите, чтобы супервизор управлял и поддерживал определенный процесс, я бы рекомендовал использовать exec
в вашем файле инициализации bash, таким образом супервизор будет контролировать ваш процесс. Например.
/path/to/app/init.sh
#!/bin/bash
exec beanstalkd -l 127.0.0.1 -p 11300
Вы можете найти это полезным: http://sjsnyder.com/managing-virtualenv-apps-with-supervisor