Estou tentando tail
um arquivo de log em várias máquinas remotas e encaminhar a saída para minha estação de trabalho local. Quero que as conexões fechem ao pressionar Ctrl- C.
No momento, tenho a seguinte função que quase funciona como pretendido.
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
}
As conexões fecham e eu recebo a saída de tail
. MAS, há algum tipo de buffer em andamento porque a saída ocorre em lotes.
E aqui está a parte divertida…
Eu posso ver o mesmo comportamento de buffer ao executar o seguinte e anexar "teste" ao arquivo /var/log/server.log
nas máquinas remotas 4-5 vezes ...
ssh server-01 "tail -f /var/log/server.log | grep test"
... e encontrou duas maneiras de desativá-lo ...
Adicione sinalizador -t ao ssh.
ssh -t server-01 "tail -f /var/log/server.log | grep test"
Remova a cotação do comando remoto.
ssh server-01 tail -f /var/log/server.log | grep test
No entanto, nenhuma dessas abordagens funciona para a função executada em várias máquinas mencionadas acima.
Eu tentei o dsh, que tem o mesmo comportamento de buffer ao executar.
dsh -m server-01,server-02 -c "tail -f /var/log/server.log | grep test"
Mesmo aqui, se eu remover a cotação, o buffer desaparece e tudo funciona bem.
dsh -m server-01,server-02 -c tail -f /var/log/server.log | grep test
Também tentei, parallel-ssh
que funciona exatamente da mesma forma que dsh
. Alguém pode explicar o que está acontecendo aqui?
Como corrijo esse problema? Seria ideal para ir direto, ssh
se possível.
PS: Não quero usar nada multitail
parecido, pois quero poder executar comandos arbitrários.
dbitail
e fazer o download aqui .