Sto provando a tail
un file di registro su più macchine remote e inoltrare l'output alla mia workstation locale. Voglio chiudere le connessioni quando si preme Ctrl- C.
Al momento ho la seguente funzione che funziona quasi come 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
}
Le connessioni si chiudono e ricevo l'output da tail
. MA, c'è un qualche tipo di buffering in corso perché l'output arriva in batch.
Ed ecco la parte divertente ...
Riesco a vedere lo stesso comportamento di buffering quando eseguo quanto segue e accedo "test" al file /var/log/server.log
sui computer remoti 4-5 volte ...
ssh server-01 "tail -f /var/log/server.log | grep test"
... e ho trovato due modi per disabilitarlo ...
Aggiungi -t flag a ssh.
ssh -t server-01 "tail -f /var/log/server.log | grep test"
Rimuovere la quotazione dal comando remoto.
ssh server-01 tail -f /var/log/server.log | grep test
Tuttavia, nessuno di questi approcci funziona per la funzione che viene eseguita su più macchine sopra menzionate.
Ho provato dsh, che ha lo stesso comportamento di buffering durante l'esecuzione.
dsh -m server-01,server-02 -c "tail -f /var/log/server.log | grep test"
Lo stesso qui, se rimuovo il preventivo, il buffering scompare e tutto funziona bene.
dsh -m server-01,server-02 -c tail -f /var/log/server.log | grep test
Ho anche provato parallel-ssh
che funziona esattamente come dsh
. Qualcuno può spiegare cosa sta succedendo qui?
Come posso risolvere questo problema? Sarebbe l'ideale per andare dritto, ssh
se possibile.
PS Non voglio usare multitail
o simili poiché voglio essere in grado di eseguire comandi arbitrari.
dbitail
e scaricarlo da qui .