Estoy tratando de tailregistrar 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.logen 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-sshcuál funciona exactamente igual quedsh . ¿Alguien puede explicar lo que está pasando aquí?
¿Cómo soluciono este problema? Sería ideal para ir directamente sshsi es posible.
PD: no quiero usar multitailo similar, ya que quiero poder ejecutar comandos arbitrarios.
dbitaily descargarlo desde aquí .