web-dev-qa-db-ja.com

ssh -n machine.com 'tail -fファイル'はしばらく後に静かに働く停止

私はリモートサーバー上にログファイルを持っています、そして私はsshを介してローカルマシン上で_tail -f_それを必要とする必要があります。コマンドはかなり簡単です。

_ssh -n [email protected] '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です。

あらゆる助けがあります。

2
Dmitry Frank

あなたはチェックするべきです

/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'&
 _

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

3
Requist

ssh -o tcpkeepalive =はい-o clientaliveInterval = 60

ClientAliveIntervalサーバー側の場合はIEです。 SSHDでのみ機能します。

代わりに、次のようにします。

ssh -o TCPKeepAlive=yes -o ServerAliveInterval=60
 _

検討してください。

ServerAliveCountMax
 _

これは良い参照です: https://unix.stackexchange.com/questions/34004/how-does-tcp-keepalive-work-in-ssh

1
DDD

これが担保の優位性を持つ単純な解決策です(私はあなたに推測させます):

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