有没有办法使journalctl显示日志从“最后一次foo.service运行”?

我特别感兴趣的是看看在定时器上运行的onehot服务的输出。 --unit标志是closures的,但它将所有服务运行连接在一起。 我能想到的最明显的方法就是过滤PID,但是这让我担心分叉的PID重用/服务,并且获得最后的PID非常不方便。 有没有其他的标识符对应一个服务的单个运行,我可以用来过滤日志?

编辑:我会高兴地接受权威的“不”,如果这是真正的答案。

我不确定哪个时间戳最有意义,但这对我有用。 希望有一个更好的方式来处理来自systemctl show的时间戳比awk – 无法弄清楚如何控制时间戳的格式。

 unit=foo.service ts=$(systemctl show -p ActiveEnterTimestamp $unit) echo $ts ActiveEnterTimestamp=Fri 2016-11-11 12:30:01 MST journalctl -u $unit --since "$(echo $ts | awk '{print $2 $3}')" 

您可以使用引导标志仅从该引导中获取日志。 例如

 journalctl _SYSTEMD_UNIT=avahi-daemon.service -b 5 

这些可能会帮助你:

  • journalctl -u foo.service | 尾巴-n 2

    或者用期望的行数replace2

  • journalctl -u foo.service –since =' 2016-04-11 13:00:00 '

您可以将它们组合起来,以获得最后一次运行时间戳记,然后使用带有–since开关的时间戳记。

您可以使用Journalctl的字段filter。 例如

 journalctl _PID=1234 

获取所有可用字段的列表:

 journalctl --fields --unit kubelet 

一个可用的字段是_PID

您可以使用pidofsystemctl show --property MainPID <SERVICE_NAME>获取正在运行的进程的PID

所以下面是我如何从当前Kubernetes kubeletstream程获取日志:

 # journalctl --unit kubelet _PID=$(systemctl show --property MainPID kubelet 2>/dev/null | cut -d= -f2) | head 

现在告诉我为什么我Kubernetes是如此难以安装:-(