2

У меня есть файл журнала на удаленном сервере, и мне нужно 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

Вы должны проверить

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

Вы также можете добавить это в свой скрипт входа в систему, так что вам не нужно вводить это вручную.

0

Вот простое решение с дополнительным преимуществом (я позволю вам догадаться):

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .