У меня есть вывод терминала, который я хотел бы сделать доступным нескольким пользователям.
в настоящее время что-то вроде:
command > /var/logs
для ввода, и:
watch tail -30 /var/logs
для входных клемм.
Однако это нежелательно, поскольку отслеживаются только опросы, а не вывод информации при наличии обновлений, а tail не допускает прокрутку назад.
решение1
Вы ставите две проблемы:
смотреть только опросы, а не выводить информацию о наличии обновлений
tail -f
не опрашивает. Начиная с версии 7.5 GNU Coreutils, tail -f
будет использовать интерфейс ядра Linux inotify
для получения сигналов от ядра, указывающих на то, что файл был изменен. Если вы не используете GNU Coreutils или используете версию старше 7.5 по какой-то причине, он будет опрашивать раз в секунду. Он, вероятно, также опрашивает в операционных системах POSIX, отличных от Linux (BSD, Solaris и т. д.), но вам придется исследовать это в каждом конкретном случае: некоторые из этих ОС используют GNU Coreutils, но ядро не поддерживает ; некоторые из них вообще inotify
не используют GNU Coreutils для реализации .tail
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
следует это сделать.
решение2
Вам нужна программа вроде screen
или tmux
.