Lo que ve es el efecto de un búfer de salida estándar en grep
proporcionada por Glibc. La mejor solución es deshabilitarlo usando --line-buffered
(GNU grep, no estoy seguro de qué otras implementaciones podrían admitirlo o algo similar).
En cuanto a por qué esto solo sucede en algunos casos:
ssh server "tail -f /var/log/server.log | grep test"
ejecuta todo el comando entre comillas en el servidor; por lo tanto, grep
espera para llenar su búfer.
ssh server tail -f /var/log/server.log | grep test
ejecuta grep
en su máquina local en la salida tail
enviado a través del canal ssh.
La parte clave aquí es que grep
ajusta su comportamiento dependiendo de si es stdin
es un terminal o no. Cuando ejecutas ssh -t
, el comando remoto se ejecuta con un terminal de control y, por lo tanto, el control remoto grep
se comporta como el local.
mira esto:multitail
MultiTail le permite monitorear archivos de registro y salida de comandos en múltiples ventanas en una terminal, colorear, filtrar y fusionar.
Para seguir los registros en varios servidores, use:
multitail -l 'ssh [email protected] "tail -f /path/to/log/file"' -l 'ssh [email protected] "tail -f /path/to/log/file"'