我們有幾個應用程序服務器和一箇中央監控服務器。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