如何永久保持python HTTP Server?

时间:2011-09-09 15:24:37

标签: python http shutdown

我在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&分开它,但正如我之前提到的那样,它会退出。任何建议都值得赞赏,因为它看起来我不明白为什么它会关闭。

5 个答案:

答案 0 :(得分:3)

您可以使用UNIX daemon包在Python中编写python-daemon,或使用Windows service编写pywin32

不幸的是,我知道没有“可移植”的解决方案来编写守护进程/服务进程(用Python或其他方式)。

答案 1 :(得分:2)

这是关于驾驶的故事中的一条建议。你当然想要安全驾驶(找出你的程序失败的原因并修复它)。在(罕见?)崩溃的情况下,某些监视基础结构(如monit)可以帮助重新启动崩溃的进程。你可能不会想用它来记录崩溃,就像你不想在每次停车时都要部署你的安全气囊一样。

答案 2 :(得分:1)

您是否尝试过在screen会话中运行它?

$ screen -L sudo python webserver.py

答案 3 :(得分:1)

嗯,第一步是找出崩溃的原因。有两种可能的可能性:

  • serve_forever调用正在抛出异常。
  • python进程崩溃/被终止。

在前一种情况下,你可以通过try-except将它包装在一个循环中,使它永远存在。记录错误详细信息可能是个好主意。

后一种情况有点棘手,因为它可能是由各种各样的事情引起的。如果你在前台运行脚本会发生什么?如果没有,也许正在运行某种维护服务来终止你的脚本?

不是一个完整的答案,但可能足以帮助您诊断问题。

答案 4 :(得分:0)

作为屏幕的替代方案,NoHup可确保您在注销后继续运行。

值得检查日志以查看其被杀/退出的原因以及它可能与操作系统无关但是内部故障。