Вопрос: journalctl - останавливается после выхода из пейджера


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

journalctl -u my-service

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

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


9
2018-01-05 17:35


Источник




Ответы:


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

 FRSXMK

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

-K или --quit-on-intr                 Вызывает меньше немедленного выхода (со статусом 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

6
2018-06-22 16:39



У меня такая же проблема SYSTEMD_LESS, но я подтвердил это делает изменить флаги, отправленные на less, Вы можете проверить, найдя PID less и делает hd /proc/<pid>/environ, Найдите переменную окружения LESS, Он будет там, но пустой (обычно это FRSXMK). Вы также можете ввести _K в меньшей степени, чтобы определить, установлен ли этот флаг. Обычно это так. Если вы пройдете SYSTEMD_LESS= это не так. Я думаю, что процесс журналирования сигнализирует пейджер, когда он SIGINT, поэтому less умирает независимо от этой настройки.
Вот хакерское доказательство концепции, которое показывает, как вы можете обойти это: gist.github.com/chriskuehl/9ab4c74c19f2f4cb883744171335ac44