无法使用特定时间覆盖 systemd 计时器

Ste*_*eve 8 systemd systemd-timer

我使用systemd-cron它在 /lib/systemd 下创建单元文件。单位文件cron-daily.timer

[Timer]
OnCalendar=daily
Run Code Online (Sandbox Code Playgroud)

这会在午夜触发脚本。我希望它们在凌晨 3 点触发。

如果我override.confcron-daily.timer.d目录下创建/etc/systemd/system

[Timer]
OnCalendar=*-*-* 03:00:00
Run Code Online (Sandbox Code Playgroud)

并运行daemon-reload,重新启动计时器并运行systemctl list-timers它仍然想在00:00:00运行。但是,如果我改变我override.conf的有

[Timer]
OnCalendar=hourly
Run Code Online (Sandbox Code Playgroud)

然后它想按预期每小时运行一次。为什么我不能覆盖服务以在特定时间运行?

fil*_*den 9

systemd 计时器单元可以采用多种OnCalendar=规格,因此当您创建在凌晨 3 点运行的覆盖时,实际上是在添加该时间(使其每天运行两次,分别在午夜和凌晨 3 点。)

当您列出计时器时,它会显示它的下一个时间表,除非您在午夜和凌晨 3 点之间运行该命令,否则您将看到最初在午夜运行,可能会给您的印象是您的配置没有不行。(当您将其设置为时,hourly您可能会看到更改,除非您在晚上 11 点到午夜之间运行该命令。)

要更改 cron 每日运行,使其在凌晨 3 点使用覆盖文件运行,只需先清除之前的定义 ( daily),您可以通过将其设置OnCalendar=为空值来实现。

[Timer]
OnCalendar=
OnCalendar=*-*-* 03:00:00
Run Code Online (Sandbox Code Playgroud)

计时器单元的 systemd 手册页实际上记录了这一点,尽管您会在OnActiveSec=and friends下找到它,它说:

如果将空字符串分配给这些选项中的任何一个,则计时器列表将被重置,并且所有先前的分配都将无效。