ssh -n machine.com 'tail -f file' перестает работать беззвучно через некоторое время

655
Dmitry Frank

У меня есть файл журнала на удаленном сервере, и мне нужно tail -fего на локальной машине через ssh. Команда довольно тривиальна:

ssh -n user@domain.com '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

Любая помощь приветствуется.

2

2 ответа на вопрос

3
Requist

You should check the

/etc/ssh/sshd_config 

file on your server, it should have the following options enabled:

TCPKeepAlive yes ClientAliveInterval 60 

or when opening the connection use the following options in your ssh command:

ssh -o TCPKeepAlive=yes -o ClientAliveInterval=60 

an other option is to just keep some action by running something like:

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

you could also put this in your login script so you do not need to enter this manually.

Спасибо, я проверю это в течение некоторого времени, чтобы убедиться, действительно надеюсь, что это поможет. Но не могли бы вы рассказать подробнее о `TCPKeepAlive = no`? Звучит странно, если я ** хочу ** сохранить соединение живым :) Dmitry Frank 10 лет назад 0
TCPKeepAlive не всегда работает, и по умолчанию - да (я думаю), вместо этого механизма мы переключаемся на другую систему, которая каждые 15 секунд активно запрашивает ответ сервера, чтобы поддерживать соединение. Может быть, нет необходимости отключать TCPKeepAlive, но обычно они делают, и нет необходимости при использовании ServerAliveInterval. Requist 10 лет назад 0
0
daniel Azuelos

Here is a simple solution with a collateral advantage (I'll let you guess):

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

Похожие вопросы