Executando comandos de gerenciamento customizados do django com o supervisord

5

Eu gostaria de usar o supervisord para executar alguns comandos para o meu projeto Django, mas continuo recebendo o seguinte erro:

supervisor.log:

2012-05-18 17:52:15,784 INFO spawnerr: can't find command 'source'

Se eu remover o comando "source", o log mostrará o mesmo erro: can't find command 'python' .

excerto do 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

Eu tentei remover o diretório e adicionar o caminho absoluto aos comandos, mas continuei recebendo o mesmo erro.

Eu executo o supervisord com o seguinte comando:

supervisord -c supervisord.conf -l supervisor.log
    
por mfsaint 18.05.2012 / 23:06

1 resposta

8

O comando source está disponível apenas em bash e o comando supervisor é executado por sh . Eu recomendaria usar um script para executar seus comandos:

/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

O único problema é que o supervisor terá apenas o controle do script, não o (s) comando (s). Se você tem uma situação em que deseja que o supervisor gerencie e mantenha ativo um processo específico, eu recomendaria usar exec em seu arquivo init bash, dessa forma o supervisor terá controle sobre seu processo. Por exemplo,

/path/to/app/init.sh

#!/bin/bash

exec beanstalkd -l 127.0.0.1 -p 11300

Você pode achar isso útil: link

    
por 12.06.2012 / 18:40