Sto provando a tailun 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.logsui 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-sshche funziona esattamente come dsh. Qualcuno può spiegare cosa sta succedendo qui?
Come posso risolvere questo problema? Sarebbe l'ideale per andare dritto, sshse possibile.
PS Non voglio usare multitailo simili poiché voglio essere in grado di eseguire comandi arbitrari.
dbitaile scaricarlo da qui .