![systemd 计时器:以 8601 格式获取上次执行](https://linux22.com/image/1527328/systemd%20%E8%AE%A1%E6%97%B6%E5%99%A8%EF%BC%9A%E4%BB%A5%208601%20%E6%A0%BC%E5%BC%8F%E8%8E%B7%E5%8F%96%E4%B8%8A%E6%AC%A1%E6%89%A7%E8%A1%8C.png)
是否可以从 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