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


10

Якщо я:

journalctl -u my-service

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

З less, я зазвичай просто ^C, але якщо я роблю це в journalctl, він виходить весь пейджер.

Відповіді:


6

Ви які , використовуючи lessв цій точці, але ^ C поводиться по- різному з - за того , як він був викликаний journalctl. Прапори, які проходить 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

У мене така ж постановка завдання SYSTEMD_LESS, але я підтвердив це дійсно змінити прапори , відправлені less. Ви можете перевірити, знайшовши PID lessта виконайте це hd /proc/<pid>/environ. Шукайте змінну середовища LESS. Він буде там, але порожній (зазвичай це FRSXMK). Ви також можете ввести _Kменше себе, щоб побачити, чи встановлений цей прапор. Зазвичай це так. Якщо ти передаєш, SYSTEMD_LESS=це не так. Я думаю, що процес журналу сигналізує про пейджер, коли він отримує SIGINT, через що lessпомирає, незалежно від цього параметра.

Ось стислий доказ концепції, який показує, як можна обійти це: gist.github.com/chriskuehl/9ab4c74c19f2f4cb883744171335ac44

0

Я також щойно пережив цю прикрою вигадкою.
Налаштування SYSTEMD_LESSдійсно не працює, тому що journalctl надсилає SIGTERMпейджер, коли отримає ^ C.

Моє "рішення" полягала в тому, щоб використовувати псевдонім bash таким:

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

Це переосмислює пейджер за замовчуванням і не виходить, коли переривання слідкує. Здається, що
змінна середовища SYSTEMD_COLORSє єдиним способом мати кольори та тримати менше роботи після SIGINT.

Це працює на моїй установці Debian 9.


Гм, це перестало слідувати. Але так сталося journalctl | less, може бути помилка.
clst
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.