3

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

2 回答 2

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)
于 2009-05-21T19:37:16.130 回答
3

你真的不应该在屏幕上运行生产软件。如果服务器重新启动,您将如何启动它?手动?此外,我认为您正在尝试重新发明轮子。已经有很好的工具可以做你需要的事情。

launchtool允许您运行用户提供的命令,以多种方式监督其执行,例如控制其环境、阻塞信号、记录其输出、更改用户和组权限、限制资源使用、如果失败则重新启动、连续运行、转向它变成一个守护进程,等等。

.

Monit是一个免费的开源实用程序,用于管理和监视 UNIX 系统上的进程、文件、目录和文件系统。Monit 进行自动维护和修复,并且可以在错误情况下执行有意义的因果操作。

于 2009-05-21T19:23:00.090 回答