我想使用supervisord为我的Django项目运行一些命令,但我不断收到以下错误:
supervisor.log:@H_403_3@
2012-05-18 17:52:15,784 INFO spawnerr: can't find command 'source'
如果我删除“source”命令,日志显示相同的错误:找不到命令’python’.@H_403_3@
supervisord.conf摘录:@H_403_3@
[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
我尝试删除目录并添加命令的绝对路径,但我不断收到相同的错误.@H_403_3@
我使用以下命令运行supervisord:@H_403_3@
supervisord -c supervisord.conf -l supervisor.log
解决方法
source命令仅在bash中可用,supervisor命令由sh运行.我建议使用脚本来执行命令:
/etc/supervisor/conf.d/my_app.conf@H_403_3@
[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@H_403_3@
#!/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
唯一的问题是主管只能控制脚本,而不能控制命令.如果您希望主管管理并保持特定进程的活动,我建议您在bash init文件中使用exec,这样主管就可以控制您的进程.例如.@H_403_3@
/path/to/app/init.sh@H_403_3@
#!/bin/bash exec beanstalkd -l 127.0.0.1 -p 11300
您可能会发现这很有用:http://sjsnyder.com/managing-virtualenv-apps-with-supervisor@H_403_3@