2010-03-18 109 views
2

有時候,我的整個Django基於網站進入504網關超時錯誤,因此無法顯示任何頁面。Nginx上的Django站點+ FastCGI去(504網關超時)

是否有可能編寫一個shell程序和它每5分鐘運行一次的cronjob來檢測此類錯誤並在需要時重新啓動FastCGI進程?

我目前正在使用下面的命令重新啓動FastCGI,以防萬一它崩潰但它不適用於上述情況,因爲當504網關錯誤發生時,進程仍在運行。

ps ax | grep -v grep | grep port=8001 > /dev/null || restart_fcgi.sh 

回答

3

也許你應該找出爲什麼網站開始第一服務504錯誤 - 檢查日誌(或添加記錄,如果你沒有足夠的信息),並解決任何問題。或者,您可能會發現nginx + apache + mod_wsgi是一種更穩定的方法 - nginx是一款用於提供靜態內容的夢幻前端Web服務器,但Apache非常適合託管動態進程。嘗試將它們結合起來。我曾經使用nginx + fastcgi,但我發現前者是一個更穩定的方法。

如果您仍然無法確定是什麼導致了您的問題,您可以設置一個本地運行的監控腳本並檢查響應代碼 - 如果它發現5XX,它可以強制重新啓動您的fastcgi進程。你可以在腳本中使用Python + httplib,在上面運行你的shell腳本(加上一個合適的kill -9語句)的os.system。

0

我想如果你有這個問題,那麼supervisor是你的朋友。一位非常好的朋友。和daemontools一樣,除了簡單的配置,很多幫助和非root用法。

你應該儘量找出問題的確切原因,但無論如何,一小時準備意味着你將能夠依靠失敗後重新啓動的過程足夠長的時間來過你的生活。