systemd 计时器:以 8601 格式获取上次执行

systemd 计时器:以 8601 格式获取上次执行

是否可以从 systemd 计时器获取上次执行时间?

例子:

systemctl list-timers dnf-automatic.timer
NEXT                          LEFT     LAST                          PASSED  UNIT                ACTIVATES
Wed 2017-04-12 08:02:56 CEST  21h left Mon 2017-04-10 15:49:27 CEST  18h ago dnf-automatic.timer dnf-automatic.service

是否有命令可以LAST以 ISO8601 格式打印该列?还是我需要走一条困难的道路?

答案1

所有systemd单位的属性都可以通过以下方式查询:

systemctl show $unit

可以通过以下方式查询各个属性:

systemctl show $unit -p $property --value

从技术上讲,这不是您的问题的答案,因为计时器不是“执行的”,但假设您想查看计时器所引用的单位,那么您可以使用以下命令查询其最后的“开始”时间:

systemctl show $unit -p ExecMainStartTimestamp --value

最后一次“停止”的时间是:

systemctl show $unit -p ExecMainExitTimestamp --value

这些输出的形式为So 2017-04-16 19:19:12 UTC(在我的系统上,对于我的语言环境),既不是 ISO 8601,也不能输入到 (GNU) date。但如果您LC_TIME在调用中设置为C,则可以进一步处理数据(前提是您使用 GNUdate或类似工具):

date --date="$(LC_TIME=C systemctl show $unit -p ExecMainExitTimestamp --value)" -I

这将(例如)返回2017-04-16

在版本 230 之前,systemd没有提供--value选项,而是返回前面带有属性名称和等号的属性值。在这种情况下,您必须自己从数据中提取属性的值,例如sed

date --date="$(LC_TIME=C systemctl show $unit -p ExecMainExitTimestamp | sed -e 's/^[^=]\+=//;')" -I

相关内容