python中的多服务器监视器/自动重启器

时间:2009-05-21 18:51:08

标签: python linux bash restart

我有两个必须使用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
}

2 个答案:

答案 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的   进行自动维护和   修复,可以执行有意义的   错误情况下的因果行为。