簡體   English   中英

如何永久保持python HTTP Server?

[英]How do I keep a python HTTP Server up forever?

我在python中編寫了一個簡單的HTTP服務器,通過Web UI管理服務器上托管的數據庫。 它功能完善,按預期工作。 然而,它有一個巨大的問題,它不會留下來。 它會工作一個小時左右,但如果在返回使用它時長時間不使用,我每次都必須重新初始化它。 現在我使用的方法是:

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

if __name__ == '__main__':
    main()

我在linux服務器的后台運行這個,所以我會運行像sudo python webserver.py這樣的命令來分離它,但正如我之前提到的那樣,它會退出。 任何建議都是值得贊賞的原因,因為它看起來我不明白為什么它關閉。

您可以使用python-daemon包或使用pywin32Windows服務在Python中編寫UNIX守護程序

不幸的是,我知道沒有“可移植”的解決方案來編寫守護進程/服務進程(用Python或其他方式)。

這是關於駕駛的故事中的一條建議。 你當然想要安全駕駛(找出你的程序失敗的原因並修復它)。 在(罕見?)崩潰的情況下,某些監視基礎結構(如monit )可以幫助重新啟動崩潰的進程。 您可能不希望用它來報告碰撞,就像您每次停車時都不想部署安全氣囊一樣。

您是否嘗試過在屏幕會話中運行它?

$ screen -L sudo python webserver.py

好吧,第一步是找出它崩潰的原因。 有兩種可能的可能性:

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

在前一種情況下,你可以通過try-except將它包裝在一個循環中,使它永遠存在。 記錄錯誤詳細信息可能是個好主意。

后一種情況有點棘手,因為它可能是由各種各樣的事情引起的。 如果你在前台運行腳本會發生什么? 如果沒有,也許運行某種維護服務會終止你的腳本?

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

作為屏幕的替代品, NoHup將確保您在注銷后繼續運行。

它值得檢查日志,看看為什么它被殺死/退出以及它可能與操作系統無關,而是內部故障。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM