ssh -n machine.com 'tail -f file' funktioniert nach einiger Zeit nicht mehr im Hintergrund

731
Dmitry Frank

Ich habe eine Protokolldatei auf dem Remote-Server, und ich muss tail -fes auf der lokalen Maschine über ssh. Der Befehl ist ziemlich trivial:

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

Anfangs funktioniert es einfach großartig, aber nach einiger Zeit (wahrscheinlich 1-3 Stunden) funktioniert es nicht mehr: Es gibt neue Zeilen in der Remote-Protokolldatei, die jedoch hier auf dem lokalen Computer nicht aktualisiert werden. Es wird kein Fehler gemeldet, es funktioniert einfach nicht mehr. Ich muss ihn durch Drücken von Ctrl+ unterbrechen Cund den gleichen Befehl erneut starten, und er beginnt wieder einige Zeit zu funktionieren.

Die Internetverbindung funktioniert zu 100%, weil ich gleichzeitig eine interaktive SSH-Sitzung mit demselben Remote-Server habe und immer weiter arbeitet.

Was könnte das Problem sein, wie es zu lösen ist?


Nur für den Fall würde ich sagen, was ich erreichen möchte: es geht nur um irssi-Benachrichtigungen aus der Ferne. Ich habe einen Server, auf dem irssi immer in der tmux-Sitzung läuft, und ich möchte Benachrichtigungen auf meinem Desktop erhalten. So werden wichtige Ereignisse (start_notification / stop_notification) in die Protokolldatei geschrieben, und mein lokales Skript liest dieses Protokoll und verwaltet Benachrichtigungen (Taskleistensymbol, Sound, Ereignis von libnotify).

Und wie ich schon sagte, funktioniert es nach einiger Zeit nicht mehr, bis ich es neu starte.

Mein Desktop-Betriebssystem ist Linux Mint 13 MATE, das Server-Betriebssystem ist Debian 3.2.51-1

Jede Hilfe geschätzt.

2

2 Antworten auf die Frage

3
Requist

Sie sollten das überprüfen

/etc/ssh/sshd_config 

Datei auf Ihrem Server, sollten die folgenden Optionen aktiviert sein:

TCPKeepAlive yes ClientAliveInterval 60 

oder verwenden Sie beim Öffnen der Verbindung die folgenden Optionen in Ihrem ssh-Befehl:

ssh -o TCPKeepAlive=yes -o ClientAliveInterval=60 

Eine andere Möglichkeit ist, einfach etwas zu tun, indem Sie Folgendes ausführen:

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

Sie könnten dies auch in Ihr Anmeldeskript aufnehmen, damit Sie es nicht manuell eingeben müssen.

Danke, ich werde es einige Zeit testen, um sicherzustellen, dass es wirklich hilft. Könnten Sie bitte etwas näher auf "TCPKeepAlive = no" eingehen? Es klingt seltsam, für den Fall, dass ich ** die Verbindung am Leben halten will :) Dmitry Frank vor 10 Jahren 0
TCPKeepAlive funktioniert nicht immer und der Standardwert ist yes (denke ich). Anstelle dieses Mechanismus wechseln wir zu einem anderen System, das alle 15 Sekunden aktiv nach einer Serverantwort fragt, um die Verbindung aufrecht zu erhalten. Möglicherweise muss TCPKeepAlive nicht deaktiviert werden. In der Regel ist dies jedoch der Fall, und es ist nicht erforderlich, dass Sie ServerAliveInterval verwenden. Requist vor 10 Jahren 0
0
daniel Azuelos

Hier ist eine einfache Lösung mit einem Sicherheitsvorteil (Ich lasse Sie raten):

ssh -n user@domain.com 'while : ; do date "+-- %H:%M:%S --" sleep 20 done &  tail -f /path/to/remote/file'