If I do:
journalctl -u my-service
then a Shift-F
to follow while paging, how do I (interrupt to abort)
without exiting the pager?
With less
, I typically just ^C
, but if I do that in journalctl, it exits the entire pager.
If I do:
journalctl -u my-service
then a Shift-F
to follow while paging, how do I (interrupt to abort)
without exiting the pager?
With less
, I typically just ^C
, but if I do that in journalctl, it exits the entire pager.
You are using less
at that point, but ^C is behaving differently due to how it was invoked by journalctl
. The flags that journalctl passes to less
include the following defaults:
FRSXMK
Of these, I think the "K" option applies here:
-K or --quit-on-intr Causes less to exit immediately (with status 2) when an interrupt character (usually ^C) is typed. Normally, an interrupt character causes less to stop whatever it is doing and return to its command prompt. Note that use of this option makes it impossible to return to the command prompt from the "F" command.
So, setting $SYSTEMD_LESS in your environment and omitting the "K" option should resolve the issue, it didn't work on my test on Ubuntu 16.04:
SYSTEMD_LESS="FRSXM"journalctl -u nginx
However, you can get the behavior you want confirm that the K flag is related by comparing the behavior of the following variations:
# ^C after Shift-F does not completely quit
journalctl -u nginx | less -FRSXM
# ^C after Shift-F completely quits
journalctl -u nginx | less -FRSXMK
I also just experienced this annoying quirk.
Setting SYSTEMD_LESS
indeed does not work because journalctl will send a SIGTERM
to the pager when it receives a ^C.
My "solution" was to use a bash alias like this:
alias log='SYSTEMD_COLORS=1 journalctl | less -FRSXM'
This overrides the default pager and does not exit when you interrupt follow.
The environment variable SYSTEMD_COLORS
seems to be the only way to have colors and keep less running after a SIGINT
.
This works on my Debian 9 installation.