我对查看在计时器上运行的 oneshot 服务的输出特别感兴趣。该--unit
标志是关闭的,但它将服务的所有运行连接在一起。我能想到的最明显的方法是过滤 PID,但这让我担心 PID 重用/分叉的服务,并且获取最后一个 PID 非常不方便。是否有一些其他标识符对应于服务的单次运行,我可以用来过滤日志?
编辑:如果这是真正的答案,我很乐意接受权威的“不”。
我对查看在计时器上运行的 oneshot 服务的输出特别感兴趣。该--unit
标志是关闭的,但它将服务的所有运行连接在一起。我能想到的最明显的方法是过滤 PID,但这让我担心 PID 重用/分叉的服务,并且获取最后一个 PID 非常不方便。是否有一些其他标识符对应于服务的单次运行,我可以用来过滤日志?
编辑:如果这是真正的答案,我很乐意接受权威的“不”。
从
systemd
version232
开始,我们就有了调用 ID 的概念。每次运行一个单元时,它都有一个唯一的 128 位调用 ID。与MainPID
哪个可以回收或ActiveEnterTimestamp
有解决问题不同,这是获取特定 systemd 单元调用的所有日志的故障安全方法。获取单元的最新调用ID
要获取最新调用的日志,例如
openipmi
,是否失败,您可以使用 one liner(请注意,
--value
自 以来可用systemd 230
,早于InvocationID
)我不确定哪个时间戳最有意义,但这对我有用。希望有
systemctl show
比 awk 更好的处理时间戳的方法 - 无法弄清楚如何控制时间戳的格式。您可以使用引导标志仅从该引导中获取日志。例如
这些可能会帮助您:
journalctl -u foo.service | 尾-n 2
或用预期的行数替换2
journalctl -u foo.service --since=' 2016-04-11 13:00:00 '
您也可以将它们组合起来首先获得最后一个运行时间时间戳,然后将该时间戳与 --since 开关一起使用。
您可以将字段过滤器与 Journalctl 一起使用。例如
使用以下方法获取所有可用字段的列表:
一个可用的字段是
_PID
。您可以使用
pidof
或获取正在运行的进程的 PIDsystemctl show --property MainPID <SERVICE_NAME>
下面是我从当前 Kubernetes kubelet 进程中获取日志的方法:
现在告诉我为什么我的 Kubernetes 很难安装 :-(
journalctl -r | grep -m1 foo.service