Chúng tôi có một số máy chủ ứng dụng và máy chủ giám sát trung tâm.Python để mô phỏng đuôi từ xa -f?
Hiện tại, chúng tôi đang chạy ssh với "tail -f" từ máy chủ giám sát để truyền một số nhật ký văn bản trong thời gian thực từ các máy chủ ứng dụng.
Vấn đề, ngoài sự lộng lẫy của toàn bộ cách tiếp cận là việc giết chết quá trình ssh đôi khi có thể khiến cho quá trình đuôi zombie bị trễ. Chúng ta đã bỏ qua việc sử dụng -t để tạo các terminal giả, nhưng đôi khi nó vẫn để lại các tiến trình zombie xung quanh, và -t dường như cũng gây ra các vấn đề ở nơi khác với sản phẩm lập kế hoạch công việc mà chúng ta đang sử dụng.
Là giải pháp rẻ và bẩn cho đến khi chúng tôi có thể khai thác gỗ tập trung thích hợp (Logstash và RabbitMQ, hy vọng), tôi hy vọng sẽ viết một trình bao Python đơn giản sẽ bắt đầu ssh và "tail -f", vẫn capture đầu ra, nhưng lưu trữ PID vào một textfile trên đĩa để chúng ta có thể giết chết quá trình đuôi thích hợp sau này nếu cần thiết. Lúc đầu tôi đã thử sử dụng subprocess.Popen, nhưng sau đó tôi nhấn các vấn đề với thực sự nhận được đầu ra "tail -f" trong thời gian thực (sau đó cần được chuyển hướng đến một tệp) - dường như sẽ có một máy chủ của các vấn đề chặn/đệm.
Một số nguồn dường như khuyên bạn nên sử dụng pexpect, hoặc pxssh hoặc một cái gì đó tương tự. Lý tưởng nhất là tôi muốn sử dụng chỉ Python và nó bao gồm các thư viện, nếu có thể - tuy nhiên, nếu một thư viện thực sự là cách duy nhất để làm điều này, thì tôi mở nó ra. Có một cách dễ dàng để bắt Python khởi động ssh với "tail -f", lấy đầu ra trong thời gian thực được in tới STDOUT cục bộ tại đây (vì vậy tôi có thể chuyển hướng đến một tệp cục bộ), và cũng có thể lưu PID vào một tập tin để giết sau này? Hoặc thậm chí nếu tôi không sử dụng ssh với tail -f, một số cách vẫn còn streaming một tập tin từ xa trong (gần) thời gian thực bao gồm tiết kiệm PID vào một tập tin?
Chúc mừng, Victor
EDIT: Chỉ cần làm rõ - chúng tôi muốn quá trình đuôi chết khi chúng ta giết quá trình SSH.
Chúng tôi muốn bắt đầu ssh và "tail -f" từ máy chủ giám sát, khi đó Ctlr-C, quá trình đuôi trên hộp điều khiển từ xa cũng sẽ chết - chúng tôi không muốn nó ở lại phía sau. Thông thường ssh với -t nên sửa chữa nó, nhưng nó không phải là hoàn toàn đáng tin cậy, vì lý do tôi không hiểu, và nó không chơi độc đáo với lịch trình công việc của chúng tôi.
Do đó, việc sử dụng màn hình để giữ cho quá trình hoạt động ở đầu kia không phải là điều chúng tôi muốn.
Xem thêm http://stackoverflow.com/questions/136168/get-last-n-lines-of-a-file-with-python-similar-to-tail – unmounted
@bmvou, mà câu hỏi không có gì về 'tail -f' –
Có lẽ http://stackoverflow.com/questions/1703640/how-to-implement-a-pythonic-equivalent-of-tail-f? – agf