我想使用 Supervisord 为我的 Django 项目运行一些命令,但我一直收到以下错误:
主管日志:
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
答案1
该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
/路径/到/应用程序/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
唯一的问题是,supervisor 只能控制脚本,而不能控制命令。如果您希望 supervisor 管理和保持特定进程,我建议您exec
在 bash init 文件中使用,这样 supervisor 就可以控制您的进程。例如
/路径/到/应用程序/init.sh
#!/bin/bash
exec beanstalkd -l 127.0.0.1 -p 11300
你可能会发现这很有用:http://sjsnyder.com/managing-virtualenv-apps-with-supervisor