ssh -n machine.com 'tail -f file' smette di funzionare silenziosamente dopo qualche tempo


2

Ho un file di registro sul server remoto e ne ho bisogno tail -fsul computer locale tramite ssh. Il comando è piuttosto banale:

ssh -n user@domain.com 'tail -f /path/to/remote/file'

Inizialmente funziona alla grande, ma dopo un po 'di tempo (probabilmente 1-3 ore) smette di funzionare: ci sono nuove righe nel file di registro remoto, ma non viene aggiornato qui, sul computer locale. Nessun errore viene ripetuto, smette di funzionare. Devo interromperlo premendo Ctrl+ Ce riavviare lo stesso comando, e ricomincia a funzionare, per qualche tempo.

La connessione Internet funziona al 100%, perché allo stesso tempo ho una sessione SSH interattiva sullo stesso server remoto e continua a funzionare sempre.

Quale potrebbe essere il problema, come risolverlo?


Per ogni evenienza, direi quello che sto cercando di ottenere: si tratta solo di notifiche irssi remote. Ho un server su cui irssi è sempre in esecuzione nella sessione di tmux e desidero ricevere notifiche sul mio desktop. In questo modo gli eventi importanti (start_notification / stop_notification) vengono scritti nel file di registro e il mio script locale legge questo registro e gestisce le notifiche (icona nella barra delle applicazioni, suono, evento di libnotify)

E, come ho già detto, smette di funzionare dopo qualche tempo, fino a quando non lo riavvio.

Il mio sistema operativo desktop è Linux Mint 13 MATE, il sistema operativo del server è Debian 3.2.51-1

Qualsiasi aiuto apprezzato.

Risposte:


3

Si dovrebbe controllare il

/etc/ssh/sshd_config

sul tuo server, dovrebbe avere le seguenti opzioni abilitate:

TCPKeepAlive yes
ClientAliveInterval 60

o quando si apre la connessione utilizzare le seguenti opzioni nel comando ssh:

ssh -o TCPKeepAlive=yes -o ClientAliveInterval=60

un'altra opzione è quella di mantenere un po 'di azione eseguendo qualcosa di simile:

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

puoi anche inserirlo nello script di accesso, quindi non è necessario inserirlo manualmente.


Grazie, lo proverò per qualche tempo per essere sicuro, spero davvero che ti aiuti. Ma potresti approfondire, per favore TCPKeepAlive=no? Sembra strano, nel caso in cui voglio mantenere viva la connessione :)
Dmitry Frank,

TCPKeepAlive non funziona sempre e il valore predefinito è sì (credo), invece di questo meccanismo passiamo a un sistema diverso che richiede attivamente ogni 15 secondi una risposta del server per mantenere attiva la connessione. Forse non è necessario disabilitare TCPKeepAlive ma in genere lo fanno e non è necessario quando si utilizza ServerAliveInterval.
Requist

0

Ecco una soluzione semplice con un vantaggio collaterale (ti faccio indovinare):

ssh -n user@domain.com 'while : ; do
        date "+--  %H:%M:%S  --"
        sleep 20
        done &    
    tail -f /path/to/remote/file'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.