Любой способ для потоковой передачи файла в Linux

У меня есть вывод терминала, который я хотел бы сделать доступным для нескольких пользователей

на данный момент что-то вроде:

command > /var/logs

для ввода и:

watch tail -30 /var/logs

для входных клемм.

однако это нежелательно, потому что смотреть только опросы, а не выводить, когда есть обновления и хвост не позволяет прокрутки.

2 ответа

Решение

Две проблемы, которые вы ставите:

смотреть только опросы в отличие от вывода, когда есть обновления

tail -f не опрашивает. Начиная с версии 7.5 GNU Coreutils, tail -f будет использовать ядро ​​Linux inotify интерфейс для приема сигналов от ядра, указывающих, что файл был изменен. Если вы не используете GNU Coreutils или по какой-либо причине используете версию более старую, чем 7.5, она будет опрашивать один раз в секунду. Возможно, он также опрашивает операционные системы POSIX, отличные от Linux (BSD, Solaris и т. Д.), Но вам придется исследовать его в каждом конкретном случае: некоторые из этих ОС используют GNU Coreutils, но ядро ​​не поддерживает inotify; некоторые из них не используют GNU Coreutils для реализации tail совсем.

хвост не позволяет прокрутки

less Команда специально предназначена для буферизации данных из stdin (например, из tail команда) и позволит вам прокручивать вперед и назад. Буфер не является неограниченным, но вы можете использовать параметры командной строки, чтобы увеличить или уменьшить буфер, а также изменить длину буфера для обратной прокрутки и прямой прокрутки.

Так что-то вроде

tail -f /var/logs | less

позволит вам сохранить буфер прокрутки журналов без опроса (tail просто сидит без дела, не потребляя ЦП, пока ядро ​​не выдаст ему сигнал, сообщающий, что файл был изменен).

Если вам нужно, чтобы несколько пользователей могли читать из одного и того же буфера, вы можете просто запустить tail -f /var/logs в пределах screen сессия. В моем исходном ответе не учитывалось, что вы хотите выполнить это, чтобы несколько пользователей могли видеть одни и те же данные журнала одновременно. @Let_Me_Be упомянуто screen а потом мне пришло в голову, что это, вероятно, ваш лучший выбор.

Итак, совместим мое решение и решение @ Let_Me_Be:

screen -mdS logview -- tail -f /var/logs

Предупреждение: не проверено. Пожалуйста, измените, если это не так. Но я думаю, что мы находимся на пути к правильному решению здесь.

Теперь вам просто нужно иметь screen в многопользовательском режиме. Это немного сложно, поэтому я позволю этому сайту говорить за себя. Суть в том, что вы должны добавить multiuser on на ваш ~/.screenrc файл. Также см. Общие проблемы внизу этой ссылки.

Теперь пользователи могут просматривать журнал:

screen -rS logview

должен сделать это.

Вы хотите программу, как screen или же tmux,

Другие вопросы по тегам