如何从 systemctl 服务日志中查看最新的 x 行

use*_*334 65 systemd journalctl systemctl

我正在寻找一种方法,可以简单地从 Debian 中的 systemctl 服务打印最后 X 行。我想将此代码安装到脚本中,该脚本使用打印的和最新的日志条目。我找到了这篇文章,但我无法根据我的目的修改它。

目前我正在使用这段代码,它只是给了我一小段日志文件:

journalctl --unit=my.service --since "1 hour ago" -p err
Run Code Online (Sandbox Code Playgroud)

为了举例说明结果应该是什么样子,只需为任何服务输入上面的命令并滚动到日志末尾。然后从底部开始复制最后 300 行。

我的想法是使用 egrep ex。egrep -m 700 .但从现在起我就没有运气了。

sou*_*edi 125

journalctl --unit=my.service -n 100 --no-pager
Run Code Online (Sandbox Code Playgroud)


小智 19

如果您想查看最后n查看打印到日志中的新消息,请尝试以下操作:

journalctl -u <service name> -n <number of lines> -f
Run Code Online (Sandbox Code Playgroud)

where-n表示您希望从日志尾部看到的行数,并-f指定您希望在日志更改时跟踪日志。


dr_*_*dr_ 14

您可以将输出通过管道传输到tail

journalctl --unit=my.service | tail -n 300
Run Code Online (Sandbox Code Playgroud)

tail命令将在 stdin 中接收到的最后一行(默认为 10 行)打印到 stdout。

编辑:如评论中所述,这对于非常大的日志来说效率低下。

  • 对于大型日志,tail 可能会非常缓慢。journalctrl 内置的 `-n` 就是你想要的。例如`journalctl -n 300` (17认同)
  • 一个非常糟糕的主意。为什么要将 30 TB 的数据通过管道传输到 tail 中以显示最后 10 条记录? (10认同)
  • 完全忘记了尾巴 - 好主意,非常感谢! (2认同)
  • 这是一个特别糟糕的答案。不要这样做! (2认同)

小智 12

只是:

journalctl -u SERVICE_NAME -e
Run Code Online (Sandbox Code Playgroud)

参数-e代表:

-e --pagerend; 立即跳转到隐含寻呼工具内的日志末尾。这意味着 -n 1000 以保证寻呼机不会缓冲无限大小的日志。这可能会被带有其他数值的显式 -n 覆盖,而 -nall 将禁用此上限。

  • 就是那个 !其他答案将遍历整个日志直到结束,这对于大型系统日志来说可能非常长。 (2认同)