从服务重新启动时起显示日志日志

sdh*_*ht0 4 journalctl systemctl

自上次重新启动服务以来,是否有一种规范的方法可以从 journalctl 获取所有日志?我想要做的是重新启动服务并立即查看自启动重新启动以来的所有日志。

我想出了:

$ unit=prometheus
$ sudo systemctl restart $unit
$ since=$(systemctl show $unit | grep StateChangeTimestamp= | awk -F= '{print $2}')
$ sudo systemctl status -n0 $unit && sudo journalctl -f -u $unit -S "$since"
Run Code Online (Sandbox Code Playgroud)

这可能会奏效,但我想知道是否有更具体的方法可以说:重新启动并从那时起给我所有日志。

fil*_*den 5

您可以使用调用 id,它是服务单元特定运行的唯一标识符。

它是在 systemd v232中引入的,因此您至少需要该版本的 systemd 才能使其工作。

要获取服务当前运行的调用 ID:

$ unit=prometheus
$ systemctl show -p InvocationID --value "$unit"
0e486642eb5b4caeaa5ed1c56010d5cf
Run Code Online (Sandbox Code Playgroud)

然后搜索带有该调用 ID 的日志条目:

$ journalctl INVOCATION_ID=0e486642eb5b4caeaa5ed1c56010d5cf + _SYSTEMD_INVOCATION_ID=0e486642eb5b4caeaa5ed1c56010d5cf
Run Code Online (Sandbox Code Playgroud)

我发现您需要 INVOCATION_ID 和 _SYSTEMD_INVOCATION_ID 才能获取所有日志。后者由 systemd 添加,用于单元本身输出的日志(例如,在该服务中运行的进程的标准输出),而前者附加到 systemd 获取的事件(例如,该单元的“Starting”和“Started”消息)。 )

请注意,您也不需要按单位名称进行过滤。由于调用 id 是唯一的,通过 id 本身过滤就足以只包含您感兴趣的服务的日志。