【问题标题】:Multi-server monitor/auto restarter in pythonpython中的多服务器监视器/自动重启器
【发布时间】:2010-10-28 00:37:05
【问题描述】:

我有 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
}

【问题讨论】:

  • 这些真的是线程吗?还是它们是子进程?
  • python 脚本(我认为)需要多线程来独立处理两个单独程序的重新启动。所以它们是独立启动子进程的线程。

标签: python linux bash restart


【解决方案1】:

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

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

.

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

【讨论】:

  • 虽然我的客户正在使用该服务器,但它不是关键任务,它是用于非商业用途的测试服务器。服务器程序,虽然它们很重要,但如果它们死了,它们不会杀死任何人或花费任何人的钱。这个练习的主要目的是创建一个有用的程序,我可以在将来学习 python 时扩展它。我发现当我需要满足时我学得最好。可能有应用程序可以做到这一点,但这违背了目的。
【解决方案2】:

“需要多线程来处理两个独立程序的重启”

不明白为什么。

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)

【讨论】:

  • 哇,我将在接下来的一个小时里分析该代码,以获得我可以从中收集到的每一滴信息。谢谢!
猜你喜欢
  • 2012-11-04
  • 2020-07-17
  • 2013-05-31
  • 2019-03-10
  • 2019-08-23
  • 1970-01-01
  • 2022-12-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多