journalctl - przestań obserwować bez wychodzenia z pagera

10

Jeśli zrobię:

journalctl -u my-service

następnie Shift-Fdo naśladowania podczas stronicowania, jak to zrobić (interrupt to abort)bez wychodzenia z pagera?

Dzięki less, ja zwykle po prostu ^C, ale jeśli to zrobić w journalctl, to wyjście z całą pager.

MikeKusold
źródło

Odpowiedzi:

6

Ci przy użyciu lessw tym momencie, ale ^ C zachowuje się inaczej ze względu na to, jak został wywołany przez journalctl. Flagi, które przekazuje dziennik, lesszawierają następujące wartości domyślne:

 FRSXMK

Spośród nich myślę, że ma tutaj zastosowanie opcja „K”:

-K lub --quit-on-intr Powoduje, że less kończy natychmiast (ze statusem 2), gdy zostanie wpisany znak przerwania (zwykle ^ C). Zwykle znak przerwania powoduje, że less przerywa to, co robi, i wraca do wiersza poleceń. Zauważ, że użycie tej opcji uniemożliwia powrót do wiersza poleceń z polecenia „F”.

Tak więc ustawienie $ SYSTEMD_LESS w twoim środowisku i pominięcie opcji „K” powinno rozwiązać problem, nie działało to w moim teście na Ubuntu 16.04:

 SYSTEMD_LESS="FRSXM"journalctl -u nginx

Można jednak uzyskać pożądane zachowanie, aby potwierdzić, że flaga K jest powiązana, porównując zachowanie następujących odmian:

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

# ^C after Shift-F completely quits
journalctl -u nginx | less -FRSXMK
Mark Stosberg
źródło
Mam takie same ustawienia problemu SYSTEMD_LESS, ale potwierdziłem, że to zmienia flagi wysłane do less. Możesz to sprawdzić, znajdując PID lessi wykonując czynności hd /proc/<pid>/environ. Poszukaj zmiennej środowiskowej LESS. Będzie tam, ale pusty (zwykle jest FRSXMK). Możesz także wpisać _Kless w celu sprawdzenia, czy ta flaga jest ustawiona. Zwykle tak jest. Jeśli zdasz, SYSTEMD_LESS=nie jest. Myślę, że proces Journalctl sygnalizuje pagerowi, kiedy się pojawi SIGINT, dlatego lessumiera niezależnie od tego ustawienia.
Oto hacky proof-of-concept, który pokazuje, jak można to obejść: gist.github.com/chriskuehl/9ab4c74c19f2f4cb883744171335ac44
0

Właśnie doświadczyłem tego irytującego dziwactwa.
Ustawienie SYSTEMD_LESSrzeczywiście nie działa, ponieważ dziennik wyśle ​​a SIGTERMdo pagera po otrzymaniu ^ C.

Moim „rozwiązaniem” było użycie aliasu bash takiego jak ten:

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

Zastępuje to domyślny pager i nie kończy działania po przerwaniu śledzenia. Wydaje się, że
zmienna środowiskowa SYSTEMD_COLORSjest jedynym sposobem, aby mieć kolory i mniej działać po SIGINT.

Działa to w mojej instalacji Debian 9.

clst
źródło
Hmm, przestało to następować. Ale tak też journalctl | lessmoże być błąd.
clst