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 і перезапустіть ту ж команду, і вона почне працювати знову, протягом деякого часу.

Підключення до Інтернету працює на 100%, тому що в той же час я маю інтерактивний сеанс SSH до того самого віддаленого сервера, і він постійно працює.

Якою може бути проблема, як її вирішити?


На всякий випадок, я б сказав, що я намагаюся досягти: це просто віддалені повідомлення irssi. У мене є сервер, на якому irssi завжди працює в tmux сесії, і я хочу отримувати сповіщення на своєму робочому столі. Так що важливі події (start_notification / stop_notification) записуються в файл журналу, а мій скрипт читає цей журнал і керує сповіщеннями (піктограма лотка, звук, подія libnotify)

І, як я вже сказав, він перестає працювати через деякий час, поки я не перезапустити його.

Моя ОС на робочому столі - Linux Mint 13 MATE, серверна ОС - 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 не завжди працює і за замовчуванням є так (я думаю), замість цього механізму ми переходимо до іншої системи, яка активно просить кожні 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'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.