Ce que vous voyez est l'effet d'un tampon stdout standard dans grep
fourni par Glibc. La meilleure solution est de le désactiver en utilisant --line-buffered
(GNU grep, je ne sais pas quelles autres implémentations pourraient le prendre en charge ou quelque chose de similaire).
Quant à pourquoi cela n'arrive que dans certains cas :
ssh server "tail -f /var/log/server.log | grep test"
exécute toute la commande entre guillemets sur le serveur - donc grep
attend de remplir son tampon.
ssh server tail -f /var/log/server.log | grep test
exécute grep
sur votre machine locale sur la sortie tail
envoyé via le canal ssh.
L'élément clé ici est que grep
ajuste son comportement selon que son stdin
est un terminal ou non. Lorsque vous exécutez ssh -t
, la commande à distance s'exécute avec un terminal de contrôle et donc la télécommande grep
se comporte comme votre local.
regarde ça :multitail
MultiTail vous permet de surveiller les fichiers journaux et la sortie des commandes dans plusieurs fenêtres d'un terminal, colorier, filtrer et fusionner.
Pour suivre les journaux sur plusieurs serveurs, utilisez :
multitail -l 'ssh [email protected] "tail -f /path/to/log/file"' -l 'ssh [email protected] "tail -f /path/to/log/file"'