Django 開発サーバーを使用してデーモンを起動すると、views.py からすべてのコマンドが実行されますが、Web ページがハングします。デーモンは正常に起動していますが、Web ページのハングを修正する必要があります。Red Hat Enterprise Linux 6.3 で作業しています。
それが私または私のデーモンの間違いではないことを確認するために、次のテストを実行しました。
1) 新しい Django プロジェクト「djtesting」を作成し、次のコードで 1 つの views.py ファイルを作成しました (httpd デーモンを開始します)。
from django.http import HttpResponse
import subprocess
def hello(request):
res = subprocess.call("/usr/sbin/httpd")
return HttpResponse("Testing.")
2) この関数を urls.py に追加しました:
from django.conf.urls.defaults import patterns, include, url
from djtesting.views import hello
urlpatterns = patterns('',
('^hello/$', hello),
)
3) 次に、「python manage.py runserver 192.168.1.226:8000」で Web サーバーを起動し、ブラウザーで「http://192.168.1.226:8000/hello/」の Web ページを開きます。デーモンは正常に起動しましたが、「テスト中」というメッセージが表示されてからハングします (ロードを開始し、これでハングします)。しかし、「/etc/init.d/httpd stop」でデーモンを停止すると、Web ページのロードが停止します。サーバーはデーモンの動作が完了するまで待機しているようですが、終了を待たずに起動するだけで済みます。
デーモンを実行する別の方法を試しましたが(もちろん、1回の試行で1行)、同じ悪い結果になりました:
thread.start_new_thread(os.system, ('/usr/sbin/httpd',))
process = subprocess.Popen("/usr/sbin/httpd", stdout=subprocess.PIPE, stdin=subprocess.PIPE, shell=True)
res = subprocess.call(["/usr/sbin/httpd", "&"])
res = subprocess.Popen("/usr/sbin/httpd")
res = os.system("/usr/sbin/httpd &")
res = os.spawnl(os.P_NOWAITO, '/usr/sbin/httpd', '&')
同様の質問を見つけましたが、RHEL6.3 で作業しているため、start-stop-daemon を使用できません: 基盤となるサーバーでデーモンを開始した後に Web ページがハングするのはなぜですか?