3

djangofastcgiプロセスを開始するためのsupervisord.confを作成しようとしています。唯一の問題は、fastcgiコマンドを実行すると、fastcgiプロセスが生成され、スーパーバイザーに「EXITED」としてすぐに表示されることです。(これはちょっと監督者のポイントを打ち負かします)

スーパーバイザープロセスが、django fastcgiプロセスが実際に実行されているが、バックグラウンドにあるという事実を認識できる方法はありますか?私はすべてのsupervisordconfigparamsを調べていましたが、これは可能であると思われます(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

1 に答える 1

4

django を強制的にデーモンとして実行することなく試してみてください。スーパーバイザーのドキュメントによると:

スーパーバイザーの下で実行されることを意図したプログラムは、それ自体をデーモン化すべきではありません。代わりに、フォアグラウンドで実行する必要があります。起動元の端末から切り離してはなりません。

于 2012-04-06T21:28:27.633 に答える