2012-03-14 117 views
3

我想寫一個supervisord.conf來啓動一個django fastcgi進程。唯一的問題是,當我執行我的fastcgi命令時,它產生了一個fastcgi進程,並立即在主管中顯示爲「EXITED」。 (這有點違背了主管的觀點)Django Supervisord fastcgi配置(supervisord.conf) - 立即退出

有沒有某種方式讓主管進程可以意識到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 

感謝您的閱讀。任何意見非常感謝。

回答

4

嘗試一下,不要強迫django作爲守護進程運行。每位主管docs

計劃在管理者下運行的程序不應該自我監禁 。相反,他們應該在前臺運行。他們應該不會從其啓動的終端上分離。