2011-09-09 51 views
6

我在python中編寫了一個簡單的HTTP服務器來管理通過Web UI託管在服務器上的數據庫。它完美的功能和按預期工作。然而它有一個巨大的問題,它不會留下來。它可以工作一個小時左右,但是如果長時間不用時再使用它,我必須每次重新初始化它。現在我用,使其服務的方法是:如何讓python HTTP Server永遠保持最新狀態?

def main(): 
    global db 
    db = DB("localhost") 
    server = HTTPServer(('', 8080), MyHandler) 
    print 'started httpserver...' 
    server.serve_forever() 

if __name__ == '__main__': 
    main() 

我在Linux服務器上的後臺運行,這讓我可以運行像須藤蟒蛇命令webserver.py &將其卸下,但正如我所說之前一段時間後退出。任何建議是讚賞的原因,因爲它的立場,我不明白爲什麼它關閉。

+0

惡魔們很好。 「一段時間後退出」 – Vamsi

+5

。你真的需要解決這個問題。在確定它「退出」後,其他一切都很容易。請更精確地定義「退出」。請**以正確的理由更新**問題。 –

回答

1

那麼,第一步是弄清楚它爲什麼會崩潰。有兩種可能性:

  • serve_forever調用拋出異常。
  • python進程崩潰/被終止。

在前一種情況下,您可以通過將其包裝在一個循環中,並使用try-except將其永久生存。可能是記錄錯誤細節的好主意。

後一種情況有點棘手,因爲它可能是由各種事情引起的。如果您在前臺運行腳本,會發生嗎?如果沒有,也許有某種維護服務運行正在終止您的腳本?

不是一個完整的答案,但可能足以幫助您診斷問題。

1

您是否嘗試過從screen會話中運行它?

$ screen -L sudo python webserver.py 
0

作爲屏幕的替代方案,有NoHup這將確保該過程在您註銷後繼續運行。

它值得檢查日誌,看看爲什麼它的死亡/退出,以及它可能不涉及操作系統,但內部故障。

2

以下是關於駕駛故事的一條建議。你當然想要安全駕駛(弄清楚爲什麼你的程序失敗並修復它)。在(罕見的)崩潰情況下,某些監控基礎結構(如monit)可能有助於重新啓動崩潰的進程。您可能不想使用它來在碰撞時進行清理,就像您每次停車時不想部署安全氣囊一樣。

相關問題