Saya mencoba tail
file log pada beberapa mesin jarak jauh dan meneruskan output ke workstation lokal saya. Saya ingin koneksi ditutup saat menekan Ctrl- C.
Saat ini saya memiliki fungsi berikut yang hampir berfungsi sebagaimana mestinya.
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
}
Koneksi ditutup dan saya menerima output dari tail
. TETAPI, ada beberapa jenis buffering yang terjadi karena output datang dalam batch.
Dan inilah bagian yang menyenangkan ...
Saya bisa melihat perilaku buffering yang sama ketika menjalankan yang berikut dan menambahkan "test" ke file /var/log/server.log
pada mesin jarak jauh 4-5 kali ...
ssh server-01 "tail -f /var/log/server.log | grep test"
... dan menemukan dua cara untuk menonaktifkannya ...
Tambahkan -t flag ke ssh.
ssh -t server-01 "tail -f /var/log/server.log | grep test"
Hapus kutipan dari perintah jarak jauh.
ssh server-01 tail -f /var/log/server.log | grep test
Namun, tak satu pun dari pendekatan ini bekerja untuk fungsi yang dijalankan pada beberapa mesin yang disebutkan di atas.
Saya telah mencoba dsh, yang memiliki perilaku buffering yang sama ketika mengeksekusi.
dsh -m server-01,server-02 -c "tail -f /var/log/server.log | grep test"
Sama di sini, jika saya menghapus kutipan, buffering hilang dan semuanya berfungsi dengan baik.
dsh -m server-01,server-02 -c tail -f /var/log/server.log | grep test
Juga mencoba parallel-ssh
yang berfungsi sama persis dengan dsh
. Adakah yang bisa menjelaskan apa yang terjadi di sini?
Bagaimana saya memperbaiki masalah ini? Akan ideal untuk pergi dengan lurus ssh
jika memungkinkan.
PS Saya tidak ingin menggunakan multitail
atau serupa karena saya ingin dapat menjalankan perintah sewenang-wenang.
dbitail
dan mengunduhnya dari sini .