Назад | Перейти на главную страницу

Запуск пользовательских команд управления django с супервизором

Я хотел бы использовать 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