ssh -n machine.com 'tail -f file' 一段时间后停止工作

ssh -n machine.com 'tail -f file' 一段时间后停止工作

我在远程服务器上有一个日志文件,我需要tail -f通过 将其复制到本地机器上ssh。该命令非常简单:

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

最初它运行得很好,但过了一段时间(可能是 1-3 小时)它就停止工作了:远程日志文件中有新行,但在本地机器上并没有更新。没有错误回显,它只是停止工作。我必须按Ctrl+来中断它C并重新启动相同的命令,然后它又开始工作了一段时间。

互联网连接 100% 正常工作,因为我同时与同一个远程服务器进行了交互式 SSH 会话,并且它始终保持正常工作。

可能存在什么问题?如何解决?


以防万一,我想说一下我想要实现的目标:这只是关于远程 irssi 通知。我有一台服务器,irssi 始终在 tmux 会话中运行,我想在我的桌面上接收通知。这样重要的事件(start_notification/stop_notification)就会写入日志文件,我的本地脚本会读取此日志并管理通知(托盘图标、声音、libnotify 的事件)

而且,正如我已经说过的,它会在一段时间后停止工作,直到我重新启动它。

我的桌面操作系统是 Linux Mint 13 MATE,服务器操作系统是 Debian 3.2.51-1

任何帮助均感激不尽。

答案1

你应该检查

/etc/ssh/sshd_config

文件在您的服务器上,它应该启用以下选项:

TCPKeepAlive yes
ClientAliveInterval 60

或者在打开连接时在 ssh 命令中使用以下选项:

ssh -o TCPKeepAlive=no -o ServerAliveInterval=60

另一个选择是通过运行以下命令来保留某些操作:

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

您也可以将其放入您的登录脚本中,这样您就不需要手动输入了。

答案2

ssh -o TCPKeepAlive=yes -o ClientAliveInterval=60

ClientAliveInterval用于服务器端,即它仅适用于 sshd。

相反,使用:

ssh -o TCPKeepAlive=yes -o ServerAliveInterval=60

另请考虑:

ServerAliveCountMax

这是一个很好的参考: https://unix.stackexchange.com/questions/34004/how-does-tcp-keepalive-work-in-ssh

答案3

这是一个具有附带优势的简单解决方案(我让你猜):

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

相关内容