我正在编写一个Python脚本,它应该能够自动重启。在
这是我在Python脚本中所做的
os.execl('run.sh', '')
我的运行.sh看起来像这样
^{pr2}$我之所以使用sudo fuser -ku 8000/tcp
,是因为它有点简单,因为我的python脚本是唯一一个使用端口8000的脚本。在
当我运行python脚本时,它会执行此操作并停止。在
8000/tcp: 7587(pi) 7596(pi) 7597(pi) 7605(pi) 7606(root)
./run.sh: line 3: 7587 Killed python /home/app.py
它从不重新启动python脚本。在
这并不能完全回答您的问题,但是如果您想要实现的是一个能够在零停机时间内响应TCP请求并能够对其进行更新的服务,那么唯一正确的解决方案就是通过UNIX套接字跨进程传递文件描述符。在
代码的框架可以是这样的:
使用该方法,可以构建真正透明的服务器重启。 您需要一个额外的库来将文件描述符从一个进程传递到另一个进程,就像这样:http://code.google.com/p/python-passfd/
当执行python代码时,它将创建
sys.argv
。在when Python is invoked, it sets sys.argv to everything but it's own executable.
所以你需要像
os.execlp('python', 'the_directory')
请参阅here了解其工作中的详细答案。在
根据
os.execl()
文档,此函数将替换当前的Python进程,并且永远不会返回。所以你有这个:这是一种极其复杂的做事方式。相反,您应该简单地将Python进程替换为自身:
{g}你可以用Python来代替当前的代码。有关这方面的详细信息,请参阅此处:Restarting a self-updating python script
相关问题 更多 >
编程相关推荐