Настройка fastcgi Django Supervisord (supervisord.conf) - немедленно завершается - PullRequest
3 голосов
/ 14 марта 2012

Я пытаюсь написать supervisord.conf для запуска процесса django fastcgi. Единственная проблема заключается в том, что когда я выполняю свою команду fastcgi, она порождает процесс fastcgi и сразу же отображается в супервизоре как «EXITED». (Это побеждает точку зрения руководителя)

Есть ли какой-нибудь способ, которым процесс супервизора может знать о том факте, что процесс django fastcgi, действительно, выполняется, но что он находится в фоновом режиме? Я копался во всех параметрах конфигурации супервизора, кажется, что это возможно (возможно, он может каким-то образом определить это на основе 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

Спасибо за чтение. Любой совет высоко ценится.

1 Ответ

4 голосов
/ 07 апреля 2012

Попробуйте, не заставляя django работать как демон.Согласно Supervisor docs :

Программы, предназначенные для запуска под супервизором, не должны демонизироваться.Вместо этого они должны бежать на переднем плане.Они не должны отсоединяться от терминала, с которого они запускаются.

...