使用 supervisord 运行 django 自定义管理命令

mfs*_*int 6 django supervisord

我想使用 supervisord 为我的 Django 项目运行一些命令,但我不断收到以下错误:

主管.log:

2012-05-18 17:52:15,784 INFO spawnerr: can't find command 'source'
Run Code Online (Sandbox Code Playgroud)

如果我删除“源”命令,日志会显示相同的错误: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
Run Code Online (Sandbox Code Playgroud)

我尝试删除目录并将绝对路径添加到命令中,但我一直收到相同的错误。

我使用以下命令运行 supervisord:

supervisord -c supervisord.conf -l supervisor.log
Run Code Online (Sandbox Code Playgroud)

小智 8

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
Run Code Online (Sandbox Code Playgroud)

/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
Run Code Online (Sandbox Code Playgroud)

唯一的问题是主管只能控制脚本,而不是命令。如果您希望主管管理并保持特定进程的活动状态,我建议exec在您的 bash init 文件中使用,这样主管就可以控制您的进程。例如

/path/to/app/init.sh

#!/bin/bash

exec beanstalkd -l 127.0.0.1 -p 11300
Run Code Online (Sandbox Code Playgroud)

您可能会发现这很有用:http : //sjsnyder.com/managing-virtualenv-apps-with-supervisor

  • 链接已断开,但[回程机器中有一个副本](https://web.archive.org/web/20130526045634/http://sjsnyder.com/managing-virtualenv-apps-with-supervisor)。 (3认同)