![如何排除 Ubuntu 16.04 上的 systemd 计时器故障,使其无法按照预期每分钟重新安排?](https://linux22.com/image/764621/%E5%A6%82%E4%BD%95%E6%8E%92%E9%99%A4%20Ubuntu%2016.04%20%E4%B8%8A%E7%9A%84%20systemd%20%E8%AE%A1%E6%97%B6%E5%99%A8%E6%95%85%E9%9A%9C%EF%BC%8C%E4%BD%BF%E5%85%B6%E6%97%A0%E6%B3%95%E6%8C%89%E7%85%A7%E9%A2%84%E6%9C%9F%E6%AF%8F%E5%88%86%E9%92%9F%E9%87%8D%E6%96%B0%E5%AE%89%E6%8E%92%EF%BC%9F.png)
我有一个现有的 systemctl 目标,该目标最初(默认安装)计划每天运行,几乎连续运行,每次运行结束和开始之间仅暂停 30 秒,即其默认 /usr/lib/systemd/system/my-unit.timer 为:
[Unit]
Description=My Unit description
[Timer]
OnActiveSec=0
OnUnitInactiveSec=30s
Unit=my-unit.target
[Install]
WantedBy=timers.target
现在我有一个要求,将运行时间窗口限制在每天的几个小时范围内。我环顾四周,认为我可以使用以下命令修改调度而不改变现有的目标/计时器:
systemctl edit my-unit.timer
这将自动创建一个覆盖计时器conf
/etc/systemd/system/my-unit.timer.d/override.conf
例如,我编写了以下与同名 systemd 目标关联的 systemd 计时器:
[Timer]
# Disable the default timer
OnUnitInactiveSec=
OnCalendar=*-*-* 17,18:*:00
据我所知,这应该每天运行一次,从 17:00 到 18:59 每分钟运行一次。问题是,它实际上在我第一次重新启动计时器时运行一次。它将在预期的下一分钟开始,但不会重新安排以下时间:
NEXT LEFT LAST PASSED UNIT ACTIVATES
Fri 2021-03-12 17:20:00 CET 1min 4s ago Fri 2021-03-12 17:20:01 CET 1min 2s ago
这是我在 17:20 之前重新启动计时器的一个例子。目标确实按预期在 17:20 运行,但随后 NEXT 没有更新。直到我手动重新启动计时器,它才会更新。我会将它传递给:
systemd-analyze calendar
命令并在可能的情况下在此处显示其输出,但日历命令在 Ubuntu 16.04 中尚不适用于 systemd-analyze。
我做了什么或我理解错了什么?
附带一个问题,如果我想使用相同的“上次运行后 30 秒”模式,但将其限制为每天几个小时,是否可以将单调计时器规范(如上面的 OnUnitInactiveSec)与 OnCalendar 结合起来说“按照这些单调模式运行,但仅限于这个日历时间范围内”?