Любой способ для потоковой передачи файла в 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
должен сделать это.