journalctl - прекратить подписку, не выходя из пейджера


10

Если я сделаю:

journalctl -u my-service

затем, Shift-Fчтобы следовать во время пейджинга, как мне (interrupt to abort)без выхода из пейджера?

С less, я обычно просто ^C, но если я делаю это в journalctl, он выходит из всего пейджера.

Ответы:


6

Вы которые , используя lessв этой точке, но ^ C ведет себя по- разному из - за того , как он был вызван journalctl. Флаги, которые передает journalctl, lessвключают следующие значения по умолчанию:

 FRSXMK

Из них, я думаю, вариант «K» применим здесь:

-K или --quit-on-intr Вызывает немедленное завершение less (со статусом 2), когда набирается символ прерывания (обычно ^ C). Обычно символ прерывания вызывает меньше, чтобы остановить все, что он делает, и вернуться в командную строку. Обратите внимание, что использование этой опции делает невозможным возврат в командную строку из команды «F».

Итак, установка $ SYSTEMD_LESS в вашей среде и пропуск опции «K» должны решить проблему, это не сработало в моем тесте на Ubuntu 16.04:

 SYSTEMD_LESS="FRSXM"journalctl -u nginx

Однако вы можете получить желаемое поведение и подтвердить, что флаг K связан, сравнив поведение следующих вариантов:

# ^C after Shift-F does not completely quit
journalctl -u nginx | less -FRSXM

# ^C after Shift-F completely quits
journalctl -u nginx | less -FRSXMK

У меня такая же постановка задачи SYSTEMD_LESS, но я подтвердил это действительно изменить флаги , отправленные less. Вы можете проверить, найдя PID lessи сделав hd /proc/<pid>/environ. Ищите переменную среды LESS. Это будет там, но пусто (обычно это FRSXMK). Вы также можете ввести _Kless самостоятельно, чтобы увидеть, установлен ли этот флаг. Обычно это так. Если вы пройдете, SYSTEMD_LESS=это не так. Я думаю, что процесс journalctl сигнализирует о том, что пейджер получает SIGINT, и поэтому lessумирает независимо от этого параметра.

Вот хакерское доказательство концепции, которое показывает, как вы можете обойти это: gist.github.com/chriskuehl/9ab4c74c19f2f4cb883744171335ac44

0

Я также только что испытал эту досадную причуду.
Настройка SYSTEMD_LESSдействительно не работает, так как journalctl отправит SIGTERMпейджер, когда получит ^ C.

Моим «решением» было использование псевдонима bash:

alias log='SYSTEMD_COLORS=1 journalctl | less -FRSXM'

Это переопределяет пейджер по умолчанию и не завершается, когда вы прервитесь. Кажется, что
переменная окружения SYSTEMD_COLORS- единственный способ иметь цвета и меньше работать после a SIGINT.

Это работает на моей установке Debian 9.


Хм, это перестало следовать. Но так и случилось journalctl | less, может быть ошибка.
августа
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.