我正在尝试编写一个用于启动django fastcgi进程的supervisord.conf。唯一的问题是,当我执行我的fastcgi命令时,它会产生一个fastcgi进程,并在supervisor中立即显示为“已退出”。(这有点违背了主管的观点)
有没有办法让supervisor进程知道django fastcgi进程确实在运行,但它在后台?我仔细研究了所有的supervisord配置参数,似乎这应该是可能的(也许它可以基于pid文件或其他文件以某种方式确定这一点),但我在文档中有点迷失了。
$ ./manage.py supervisor status
celerybeat RUNNING pid 12575, uptime 0:01:17
celerycam RUNNING pid 12573, uptime 0:01:17
celeryd RUNNING pid 12572, uptime 0:01:17
django EXITED Mar 13 07:57 PM
runserver RUNNING pid 12574, uptime 0:01:17注意:我实际上正在使用django-supervisor来创建我的配置文件,该文件使用Django上下文中的变量。出于本例的目的,像{{ PYTHON }}和{{ settings.VIRTUALENV_ROOT }}这样的变量只是由明显的路径填充。它的功能应该和普通的supervisor.conf文件一样。
下面是我的supervisord.conf文件。
$ more supervisord.conf
[supervisord]
logfile={{ settings.VIRTUALENV_ROOT }}/log/supervisord-jj.log
logfile_maxbytes=50MB
logfile_backups=15
pidfile={{ settings.VIRTUALENV_ROOT }}/var/run/supervisord-jj.pid
[program:celeryd]
command={{ PYTHON }} {{ PROJECT_DIR }}/manage.py celeryd
[program:celerycam]
command={{ PYTHON }} {{ PROJECT_DIR }}/manage.py celerycam
[program:runserver]
{% if settings.DEBUG %}
exclude=false
{% else %}
exclude=true
{% endif %}
[program:django]
command={{ PYTHON }} {{ PROJECT_DIR }}/manage.py runfcgi
method=threaded daemonize=true
outlog={{ settings.VIRTUALENV_ROOT }}/log/django-fcgi.log
socket={{ settings.VIRTUALENV_ROOT }}/var/run/django-run.socket
pidfile={{ settings.VIRTUALENV_ROOT }}/var/run/django.pid
[program:autoreload]
exclude=true感谢您的阅读。任何建议都是非常感谢的。
发布于 2012-04-07 05:28:28
在不强制django作为守护程序运行的情况下尝试它。根据主控引擎docs:
本应在supervisor下运行的
程序不应将其自身守护进程。相反,它们应该在前台运行。它们不应从启动它们的终端分离。
https://stackoverflow.com/questions/9694589
复制相似问题