Tôi đang cố gắng để tail
một tệp nhật ký trên nhiều máy từ xa và chuyển tiếp đầu ra đến máy trạm cục bộ của tôi. Tôi muốn đóng kết nối khi nhấn Ctrl- C.
Hiện tại tôi có chức năng sau gần như hoạt động như dự định.
function dogfight_tail() {
logfile=/var/log/server.log
pids=""
for box in 02 03; do
ssh server-$box tail -f $logfile | grep $1 &
pids="$pids $!"
done
trap 'kill -9 $pids' SIGINT
trap wait
}
Các kết nối đóng và tôi nhận được đầu ra từ tail
. NHƯNG, có một số loại bộ đệm đang diễn ra bởi vì đầu ra đến theo đợt.
Và đây là phần thú vị
Tôi có thể thấy hành vi đệm tương tự khi thực hiện các thao tác sau và nối "kiểm tra" vào tệp /var/log/server.log
trên các máy từ xa 4-5 lần.
ssh server-01 "tail -f /var/log/server.log | grep test"
Mạnh mẽ và tìm thấy hai cách để vô hiệu hóa nó
Thêm cờ -t vào ssh.
ssh -t server-01 "tail -f /var/log/server.log | grep test"
Xóa trích dẫn từ lệnh từ xa.
ssh server-01 tail -f /var/log/server.log | grep test
Tuy nhiên, cả hai cách tiếp cận này đều không hoạt động đối với chức năng thực thi trên nhiều máy được đề cập ở trên.
Tôi đã thử dsh, có hành vi đệm giống nhau khi thực thi.
dsh -m server-01,server-02 -c "tail -f /var/log/server.log | grep test"
Tương tự ở đây, nếu tôi loại bỏ trích dẫn, bộ đệm sẽ biến mất và mọi thứ hoạt động tốt.
dsh -m server-01,server-02 -c tail -f /var/log/server.log | grep test
Cũng đã thử parallel-ssh
mà hoạt động chính xác như dsh
. Ai đó có thể giải thích những gì đang xảy ra ở đây?
Làm sao để giải quyết vấn đề này? Sẽ là lý tưởng để đi thẳng ssh
nếu có thể.
PS Tôi không muốn sử dụng multitail
hoặc tương tự vì tôi muốn có thể thực thi các lệnh tùy ý.
dbitail
và tải về từ đây .