Python中的多服务器监控/自动重启器
我有两个服务器程序,需要通过GNU Screen来启动。我想用一个基于Python的程序来增强这些服务器的稳定性,这个程序会启动每个screen会话,并监控服务器的运行情况。如果服务器程序崩溃了,我需要这段Python代码来关闭多余的screen会话,并重新用screen启动服务器。
我对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
}
2 个回答
3
你真的不应该在屏幕上运行生产环境的软件。如果服务器重启了,你怎么启动它?手动去启动吗?
我觉得你是在重复别人已经做过的事情。其实已经有一些很不错的工具可以满足你的需求。
launchtool 让你可以运行用户提供的命令,并且可以通过多种方式来监督它的执行,比如控制它的运行环境、阻止信号、记录输出、改变用户和组的权限、限制资源使用、在失败时重启、持续运行、把它变成守护进程等等。
.
Monit 是一个免费的开源工具,用于管理和监控 UNIX 系统上的进程、文件、目录和文件系统。Monit 可以自动进行维护和修复,并且在出现错误时可以执行一些有意义的处理。
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)