如何排除 Ubuntu 16.04 上的 systemd 计时器故障,使其无法按照预期每分钟重新安排?

如何排除 Ubuntu 16.04 上的 systemd 计时器故障,使其无法按照预期每分钟重新安排?

我有一个现有的 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 结合起来说“按照这些单调模式运行,但仅限于这个日历时间范围内”?

相关内容