我们有几个应用程序服务器和一个中央监控服务器。Python模拟远程尾部-f?
我们目前正在监视服务器上运行带有“tail -f”的ssh,以便从应用服务器实时流式传输多个文本日志文件。
这个问题,除了整个方法的脆弱性之外,杀死ssh进程有时会让僵尸尾进程落后。我们已经使用-t来创建伪终端,但它仍然有时会留下僵尸进程,并且-t显然也会在我们正在使用的作业调度产品的其他地方引发问题。
作为一个便宜而又脏的解决方案,直到我们能够得到正确的集中式日志(Logstash和RabbitMQ,希望),我希望编写一个简单的Python包装器,它将启动ssh和“tail -f”,仍然捕获输出,但将PID存储到磁盘上的文本文件中,以便稍后在需要时可以终止适当的尾部进程。
我起初尝试使用subprocess.Popen,但后来我碰到问题,实际上得到了“tail -f”输出实时(然后需要重定向到一个文件) - 显然会有一个主机的阻塞/缓冲区问题。
一些消息来源似乎建议使用pexpect或pxssh或类似的东西。理想情况下,我只想使用Python,如果可能的话,它就是包含的库 - 但是,如果库真的是唯一的方法来做到这一点,那么我愿意接受。
是否有一个很好的简单方法让Python启动带有“tail -f”的ssh,在这里将输出实时打印到本地STDOUT(这样我可以重定向到本地文件),并且还保存PID到一个文件杀死以后?或者即使我没有使用带-f尾部的ssh,某种方式仍然可以实时(接近)流式传输远程文件,其中包括将PID保存到文件中?
干杯, 维克多
编辑:只是为了澄清 - 我们要尾部处理死当我们杀了SSH进程。
我们希望从监控服务器启动SSH和“尾-f”,那么当我们认为,在遥控盒尾部的过程应该死以及CTLR-C - 我们不希望它留下来背后。通常ssh和-t应该修复它,但由于我不明白的原因,它不是完全可靠的,而且它与我们的工作安排并不一致。
因此,使用屏幕保持进程在另一端处于活动状态并不是我们想要的。
参见http://stackoverflow.com/questions/136168/get-last-n-lines-of-a-file-with-python-similar-to-tail – unmounted
@bmvou,that问题没有关于'tail -f' –
也许http://stackoverflow.com/questions/1703640/how-to-implement-a-pythonic-equivalent-of-tail-f? – agf