我使用systemd-cron
它在 /lib/systemd 下创建单元文件。单元文件cron-daily.timer
有
[Timer]
OnCalendar=daily
这会在午夜触发脚本。我希望它们在凌晨 3 点触发。
如果我override.conf
在cron-daily.timer.d
目录下/etc/systemd/system
创建
[Timer]
OnCalendar=*-*-* 03:00:00
并运行 daemon-reload,重新启动计时器并运行systemctl list-timers
它仍然要在 00:00:00 运行。但是,如果我改变我override.conf
的
[Timer]
OnCalendar=hourly
然后它想按预期每小时运行一次。为什么我无法覆盖该服务以在特定时间运行?
答案1
systemd 计时器单元可以采用多种OnCalendar=
规格,因此当您创建在凌晨 3 点运行的覆盖时,您实际上是添加那个时间(使其每天运行两次,分别在午夜和凌晨 3 点运行。)
当您列出计时器时,它会向您显示下一个时间表,除非您在午夜和凌晨 3 点之间运行该命令,否则您将看到的是午夜的原始运行,可能会给您这样的印象:您的配置没有执行不工作。 (当您将其设置为时,hourly
您可能会看到变化,除非您在晚上 11 点到午夜之间运行该命令。)
要更改 cron 每日运行,以便使用覆盖文件在凌晨 3 点运行,只需daily
首先清除以前的定义 ( ),您可以通过设置OnCalendar=
为空值来完成此操作。
[Timer]
OnCalendar=
OnCalendar=*-*-* 03:00:00
计时器单位的 systemd 手册页实际上记录了这一点,尽管您可以在下面找到它OnActiveSec=
和朋友,其中说:
如果将空字符串分配给这些选项中的任何一个,则计时器列表将被重置,并且所有先前的分配将无效。