自上次重新启动服务以来,是否有规范的方法可以从 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"
这可能会起作用,但我想知道是否有更具体的说法:重新启动并从那时起给我所有日志。
您可以使用调用 id,它是服务单元特定运行的唯一标识符。
它是在 systemd v232 中引入的,因此您至少需要该版本的 systemd 才能使其工作。
获取当前运行的服务的调用 id:
然后搜索附加了该调用 id 的日记条目:
我发现您需要 INVOCATION_ID 和 _SYSTEMD_INVOCATION_ID 才能获取所有日志。后者由 systemd 添加用于单元本身的日志输出(例如,在该服务中运行的进程的标准输出),而前者附加到 systemd 获取的事件(例如,该单元的“开始”和“开始”消息。 )
请注意,您也不需要按单位名称进行过滤。由于调用 id 是唯一的,因此通过 id 本身进行过滤就足以仅包含您感兴趣的服务的日志。
虽然我从@filbranden 的回答中学到了一些新东西并接受了它,但我发现该技术并不能一概而论。例如,如果我想停止服务并查看它的关闭日志,则该技术不起作用,因为停止的服务没有 invocationID。
我最终使用了一种更基本的技术——简单地存储命令之前的时间并显示从那时起的所有日志。