多服务器监控/ Python中自动重新启动装置
题
我具有必须与使用GNU屏幕的开始2个服务器程序。我想用基于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
}
解决方案
“需要是多线程处理的两个单独的程序重启的”
不知道为什么。
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)
其他提示
您真的不应该在屏幕上运行的制作软件。如果服务器被重新启动,你将如何启动它?手动? 此外,我认为你正试图重新发明轮子。已经有相当不错的工具,做的事你所需要的。
launchtool 允许您运行 用户提供的指令监控其 执行在许多方面,如 控制其环境,阻断 信号,记录其输出,改变 用户和组权限,限制 资源使用情况,重新启动它,如果它 出现故障时,连续运行它, 将其变成守护程序,等等。
monit的是一个免费的开源 来管理和监控工具, 进程,文件,目录和 在UNIX系统上的文件系统。 monit的 进行自动维护和 修和可以执行有意义的 因果动作错误的情况。
不隶属于 StackOverflow