4

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

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

command > /var/logs

для ввода и:

watch tail -30 /var/logs

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

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

2 ответа2

8

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

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

tail -f не опрашивает. Начиная с версии 7.5 GNU Coreutils, tail -f будет использовать интерфейс inotify ядра Linux для получения сигналов от ядра, указывающих, что файл был изменен. Если вы не используете 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 . В моем первоначальном ответе не учитывалось, что вы хотите выполнить это, чтобы несколько пользователей могли видеть одни и те же данные журнала одновременно. @ Пусть_Me_Be упомянул screen а потом мне пришло в голову, что это, вероятно, ваш лучший выбор.

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

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

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

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

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

screen -rS logview

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

2

Вам нужна такая программа, как screen или tmux .

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