journalctl-在不退出寻呼机的情况下停止关注


10

如果我做:

journalctl -u my-service

然后Shift-F在寻呼时要遵循,如何(interrupt to abort)不退出寻呼机?

使用less,我通常只是^C,但是如果我在journalctl中这样做,它将退出整个寻呼机。

Answers:


6

正在使用less在这一点上,但^ C则表现不同,由于它是如何被调用journalctl。journalctl传递的标志less包括以下默认值:

 FRSXMK

其中,我认为“ K”选项适用于此处:

-K或--quit-on-intr 键入中断字符(通常为^ C)时,较少导致立即退出(状态2)。通常,使用中断字符可以减少执行任何操作并返回其命令提示符的可能性。请注意,使用此选项将无法从“ 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。您可以通过查找less和执行的PID进行检查hd /proc/<pid>/environ。查找环境变量LESS。它将在那里但为空(通常是FRSXMK)。您也可以键入_K较少的内容,以查看是否设置了该标志。通常是这样。如果通过SYSTEMD_LESS=,则不是。我认为journalctl进程在获得寻呼机时会发出信号SIGINT,这就是less无论设置如何都将死亡的原因。

这是一个骇人听闻的概念验证,展示了如何解决此问题:gist.github.com/chriskuehl/9ab4c74c19f2f4cb883744171335ac44

0

我也刚刚经历了这个令人讨厌的怪癖。
设置SYSTEMD_LESS确实不起作用,因为journalctl SIGTERM在收到^ C时会将a发送给寻呼机。

我的“解决方案”是使用bash别名,如下所示:

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

这将覆盖默认的寻呼机,并且在您中断跟随时不会退出。
环境变量SYSTEMD_COLORS似乎是唯一具有颜色并在运行后保持较少运行的方法SIGINT

这适用于我的Debian 9安装。


嗯,这停了下来。但是,这样做也journalctl | less可能是一个错误。
clst
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.