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"'