ssh -n machine.com 'tail -f file' pára de funcionar silenciosamente após algum tempo

2

Eu tenho um arquivo de log no servidor remoto e preciso tail -f na máquina local via ssh . O comando é bem trivial:

ssh -n [email protected] 'tail -f /path/to/remote/file'

Inicialmente funciona muito bem, mas depois de algum tempo (provavelmente de 1 a 3 horas) ele pára de funcionar: há novas linhas no arquivo de log remoto, mas ele não é atualizado aqui, na máquina local. Nenhum erro é ecoado, ele simplesmente pára de funcionar. Eu tenho que interrompê-lo pressionando Ctrl + C e reinicie o mesmo comando, e ele começa a funcionar novamente, por algum tempo.

A conexão com a Internet está 100% funcionando, porque ao mesmo tempo eu tenho uma sessão SSH interativa no mesmo servidor remoto, e ela continua funcionando sempre.

Qual poderia ser o problema, como resolvê-lo?

Apenas no caso, eu diria o que estou tentando alcançar: é apenas sobre notificações remissivas. Eu tenho um servidor no qual o irssi está sempre em execução na sessão do tmux e desejo receber notificações em minha área de trabalho. Assim, eventos importantes (start_notification / stop_notification) são gravados no arquivo de log, e meu script local lê esse log e gerencia as notificações (ícone da bandeja, som, evento da libnotify)

E, como eu já disse, ele pára de funcionar depois de algum tempo, até que eu reinicie.

Meu sistema operacional é o Linux Mint 13 MATE, o sistema operacional do servidor é o Debian 3.2.51-1

Qualquer ajuda apreciada.

    
por Dmitry Frank 22.02.2014 / 19:20

2 respostas

3

Você deve verificar o

/etc/ssh/sshd_config

no seu servidor, as seguintes opções devem estar ativadas:

TCPKeepAlive yes
ClientAliveInterval 60

ou ao abrir a conexão, use as seguintes opções em seu comando ssh:

ssh -o TCPKeepAlive=yes -o ClientAliveInterval=60

uma outra opção é apenas manter alguma ação executando algo como:

sh -c 'while echo "Still Active" ; do sleep 20 ; done'&

você também pode colocar isso em seu script de login para não precisar inserir isso manualmente.

    
por 22.02.2014 / 19:39
0

Aqui está uma solução simples com uma vantagem colateral (vou deixar você adivinhar):

ssh -n [email protected] 'while : ; do
        date "+--  %H:%M:%S  --"
        sleep 20
        done &    
    tail -f /path/to/remote/file'
    
por 22.02.2014 / 20:44