我在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&分开它,但正如我之前提到的那样,它会退出。任何建议都值得赞赏,因为它看起来我不明白为什么它会关闭。
答案 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)
嗯,第一步是找出崩溃的原因。有两种可能的可能性:
在前一种情况下,你可以通过try-except将它包装在一个循环中,使它永远存在。记录错误详细信息可能是个好主意。
后一种情况有点棘手,因为它可能是由各种各样的事情引起的。如果你在前台运行脚本会发生什么?如果没有,也许正在运行某种维护服务来终止你的脚本?
不是一个完整的答案,但可能足以帮助您诊断问题。
答案 4 :(得分:0)
作为屏幕的替代方案,NoHup可确保您在注销后继续运行。
值得检查日志以查看其被杀/退出的原因以及它可能与操作系统无关但是内部故障。