繁体   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