Apa yang Anda lihat adalah efek dari buffer stdout standar di grep
disediakan oleh Glibc. Solusi terbaik adalah menonaktifkannya dengan menggunakan --line-buffered
(GNU grep, saya tidak yakin implementasi lain apa yang mungkin mendukungnya atau yang serupa).
Adapun mengapa ini hanya terjadi dalam beberapa kasus:
ssh server "tail -f /var/log/server.log | grep test"
menjalankan seluruh perintah dalam tanda kutip di server - jadi grep
menunggu untuk mengisi buffernya.
ssh server tail -f /var/log/server.log | grep test
menjalankan grep
di mesin lokal Anda pada output tail
dikirim melalui saluran ssh.
Bagian kuncinya di sini adalah, bahwa grep
menyesuaikan perilakunya tergantung pada apakah itu stdin
adalah terminal atau tidak. Saat Anda menjalankan ssh -t
, perintah jarak jauh berjalan dengan terminal pengontrol dan dengan demikian grep
jarak jauh berperilaku seperti lokal Anda.
lihat ini:multitail
MultiTail memungkinkan Anda memantau file log dan output perintah di beberapa jendela di terminal, mewarnai, memfilter, dan menggabungkan.
Untuk membuntuti log di banyak server, gunakan:
multitail -l 'ssh [email protected] "tail -f /path/to/log/file"' -l 'ssh [email protected] "tail -f /path/to/log/file"'