我有两个必须使用GNU Screen启动的服务器程序。我想用基于Python的程序来强化这些服务器以防止崩溃,该程序启动每个屏幕会话然后监视服务器进程。如果服务器进程崩溃,我需要python代码来终止无关的屏幕会话并再次使用屏幕重启服务器。
我对python很新,但我正借此机会自学。我知道这可以在bash脚本中完成。但是我想在未来的功能上构建这个代码,所以它需要只是python。
伪代码如下:
thread-one {
While 1:
start server 1 using screen
wait for server to end
end while
}
thread-two {
While 1:
start server 2 using screen
wait for server to end
end while
}
答案 0 :(得分:6)
“需要多线程来处理重启两个独立的程序”
不明白为什么。
import subprocess
commands = [ ["p1"], ["p2"] ]
programs = [ subprocess.Popen(c) for c in commands ]
while True:
for i in range(len(programs)):
if programs[i].returncode is None:
continue # still running
else:
# restart this one
programs[i]= subprocess.Popen(commands[i])
time.sleep(1.0)
答案 1 :(得分:3)
你真的不应该在屏幕上运行生产软件。如果服务器重新启动,您将如何启动它?手动? 另外我认为你正试图重新发明轮子。已经有很好的工具可以满足您的需求。
launchtool让你运行一个 用户提供的命令监督它 以多种方式执行,例如 控制其环境,阻止 信号,记录其输出,改变 用户和组权限,限制 资源使用情况,如果它重新启动它 失败,连续运行, 把它变成一个守护进程,等等。
Monit是一个免费的开源软件 用于管理和监控的工具, 进程,文件,目录和 UNIX系统上的文件系统。 monit的 进行自动维护和 修复,可以执行有意义的 错误情况下的因果行为。