Estoy tratando de tail
registrar un archivo en varias máquinas remotas y reenviar el resultado a mi estación de trabajo local. Quiero que las conexiones se cierren al presionar Ctrl- C.
Por el momento tengo la siguiente función que casi funciona según lo previsto.
function dogfight_tail() {
logfile=/var/log/server.log
pids=""
for box in 02 03; do
ssh server-$box tail -f $logfile | grep $1 &
pids="$pids $!"
done
trap 'kill -9 $pids' SIGINT
trap wait
}
Las conexiones se cierran y recibo la salida de tail
. PERO, hay algún tipo de almacenamiento en búfer porque la salida viene en lotes.
Y aquí está la parte divertida ...
Puedo ver el mismo comportamiento de almacenamiento en búfer cuando ejecuto lo siguiente y agrego "prueba" al archivo /var/log/server.log
en las máquinas remotas 4-5 veces ...
ssh server-01 "tail -f /var/log/server.log | grep test"
... y encontré dos formas de desactivarlo ...
Agregue el indicador -t a ssh.
ssh -t server-01 "tail -f /var/log/server.log | grep test"
Eliminar la cita del comando remoto.
ssh server-01 tail -f /var/log/server.log | grep test
Sin embargo, ninguno de estos enfoques funciona para la función que se ejecuta en varias máquinas mencionadas anteriormente.
He intentado dsh, que tienen el mismo comportamiento de almacenamiento en búfer al ejecutar.
dsh -m server-01,server-02 -c "tail -f /var/log/server.log | grep test"
Lo mismo aquí, si elimino la cita, el almacenamiento en búfer desaparece y todo funciona bien.
dsh -m server-01,server-02 -c tail -f /var/log/server.log | grep test
También probé parallel-ssh
cuál funciona exactamente igual quedsh
. ¿Alguien puede explicar lo que está pasando aquí?
¿Cómo soluciono este problema? Sería ideal para ir directamente ssh
si es posible.
PD: no quiero usar multitail
o similar, ya que quiero poder ejecutar comandos arbitrarios.
dbitail
y descargarlo desde aquí .