Was Sie sehen, ist der Effekt eines Standard-Stdout-Puffers in grep
bereitgestellt von Glibc. Die beste Lösung ist, es mit --line-buffered
zu deaktivieren (GNU grep, ich bin mir nicht sicher, welche anderen Implementierungen es oder ähnliches unterstützen könnten).
Zum Warum dies passiert nur in einigen Fällen:
ssh server "tail -f /var/log/server.log | grep test"
führt den gesamten Befehl in Anführungszeichen auf dem Server aus - also grep
wartet darauf, seinen Puffer zu füllen.
ssh server tail -f /var/log/server.log | grep test
führt grep
aus auf Ihrem lokalen Rechner an der Ausgabe tail
über den ssh-Kanal gesendet.
Der Schlüsselteil hier ist, dass grep
passt sein Verhalten an, je nachdem, ob sein stdin
ist ein Terminal oder nicht. Wenn Sie ssh -t
ausführen , läuft der Remote-Befehl mit einem steuernden Terminal und damit der Remote grep
verhält sich wie Ihr lokaler.
sieh dir das an:multitail
Mit MultiTail können Sie Protokolldateien und Befehlsausgaben in mehreren Fenstern in einem Terminal überwachen, einfärben, filtern und zusammenführen.
Um Protokolle auf mehreren Servern zu verfolgen, verwenden Sie:
multitail -l 'ssh [email protected] "tail -f /path/to/log/file"' -l 'ssh [email protected] "tail -f /path/to/log/file"'