使用Python进行简单的远程进程监控

6
我希望编写一个Python脚本,用于对运行在Linux服务器上的远程进程进行一些非常简单的“无代理”监视。
它将执行以下伪代码中的任务:
for each remoteIPAddress in listOfIPAddresses:
    log into server@remoteIPAddress via ssh
    execute the equivalent of a 'ps -ef' command
    grep the result to make sure a particular process (by name) is still running

一种方法是让Python在子进程中调用shell脚本并解析它们的输出。这似乎相当低效。有没有更好的方法通过Python库实现这个功能?
我在这里和其他地方的研究中找到的唯一信息是:
- psutil - 看起来它不支持远程监控,所以我必须在远程机器上运行代理程序通过RPC报告状态。 - pymeter - 我需要编写自己的插件来监视特定的远程服务。 - stackoverflow #4546492 - 一些有用的链接,但发帖者正在寻找不同的解决方案。
谢谢,请对我温柔点,这是我的第一个问题 :-)

http://www.noah.org/python/pexpect/ 也是一个不错的选择,我想。 - NIlesh Sharma
谢谢。我已经下载了它,并将与 Fabric(下面)并行评估。 - tohster
5个回答

4

Fabric库可能会对您感兴趣。


+1 给 Fabric,相比于 Python 的 shell 脚本,它使得编写和维护这样的东西更加高效。 - user59634
非常感谢。看起来我仍然需要使用ssh命令来完成它的核心部分,但是Fabric比我自己能够凑合出来的方式更优雅地包装了它。感谢您的推荐! - tohster

1

1

看看paramiko。你可以使用它来ssh进入服务器并运行命令。然后你可以解析结果并按照自己的意愿处理。


谢谢您的建议。我想我会先从 Fabric 开始,但这是备选方案,也是一个好答案。 - tohster
我研究了Fabric和Paramiko两个工具。我接受这个答案,因为它最符合原始问题。 - tohster

0
为什么不使用像Nagios这样的专用监控工具呢? Nagios通过NRPE插件和SSH插件等提供代理和非代理监控。 试一试吧。

0

可能比你想要的更重,但Zenoss支持无代理监控。

其他答案中建议的paramiko和Fabric也是很好的选择。


谢谢。看起来这是一个商业产品,所以我会把它记在我的笔记本上,以备日后扩展使用。 - tohster
它是开源的,但他们也有商业版。 - Brian Cain

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接