ssh -n machine.com 'tail -f file'はしばらくすると静かに動作を停止します


2

リモートサーバーにログファイルがあります。 tail -f ローカルマシン上で ssh。コマンドはかなり簡単です。

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

最初はうまく動作しますが、しばらくすると(おそらく1〜3時間)動作しなくなります。リモートログファイルに新しい行がありますが、ローカルマシンでは更新されません。エラーは表示されず、動作しなくなります。押して中断しなければならない Ctrl + C 同じコマンドを再起動すると、しばらくの間、再び機能し始めます。

同時に私は同じリモートサーバーへの対話型SSHセッションを持っているので、インターネット接続は100%動作しています、そしてそれは常に動作し続けます。

問題は何か、どうやってそれを解決するのですか?


念のために、私は自分が達成しようとしていることを述べたいと思います。それはリモートのirssi通知に関するものです。 irssiが常にtmuxセッションで実行されているサーバーがあり、デスクトップで通知を受け取りたい。重要なイベント(start_notification / stop_notification)がログファイルに書き込まれるように、そして私のローカルスクリプトはこのログを読んで通知を管理します(トレイアイコン、サウンド、libnotifyのイベント)

そして、すでに述べたように、しばらくすると再起動するまで機能しなくなります。

私のデスクトップOSはLinux Mint 13 MATE、サーバーOSはDebian 3.2.51-1です。

任意の助けをいただければ幸いです。

回答:


3

あなたがチェックする必要があります

/etc/ssh/sshd_config

サーバーにファイルを保存するには、次のオプションを有効にします

TCPKeepAlive yes
ClientAliveInterval 60

または接続を開くときに、sshコマンドで次のオプションを使用します。

ssh -o TCPKeepAlive=yes -o ClientAliveInterval=60

他の選択肢は、以下のようなものを実行することによって、何らかのアクションを続けることです。

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

あなたはこれをあなたのログインスクリプトに入れることもできるので手動でこれを入力する必要はありません。


ありがとう、確かめるためにしばらくテストします。でも詳しく説明してもらえますか TCPKeepAlive=no?私の場合、それは奇妙に聞こえます 欲しいです 接続を維持するために:)
Dmitry Frank

TCPKeepAliveは常に機能するわけではなく、デフォルトはyesです(私は思う)。このメカニズムではなく、接続を維持するためにサーバーの応答を15秒ごとにアクティブに要求する別のシステムに切り替えます。 TCPKeepAliveを無効にする必要はないかもしれませんが、通常は無効になっており、ServerAliveIntervalを使用する場合は必要ありません。
Requist

0

これは、付随的な利点を伴う簡単な解決策です(私はあなたに推測させます)。

ssh -n user@domain.com 'while : ; do
        date "+--  %H:%M:%S  --"
        sleep 20
        done &    
    tail -f /path/to/remote/file'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.