我具有必须与使用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的   进行自动维护和   修和可以执行有意义的   因果动作错误的情况。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top