systemd定时器配置异常:期望每2.5小时运行一次却每2小时执行
systemd定时器配置异常:期望每2.5小时运行一次却每2小时执行
嘿,我来帮你梳理下这个问题!首先得明确:你当前的OnCalendar=00/2:30写法,和你想要的“每2.5小时运行一次”完全不是一个意思。
为什么原配置不对?
systemd的OnCalendar语法里,/间隔符是针对单个时间字段生效的。00/2:30会被解析成:从00点开始,每2小时,在第30分钟时运行。也就是执行时间会是00:30、02:30、04:30、06:30... 这就导致你看到的“每2小时运行一次”,而且时间点还和你预期的(00:00、02:30、05:00...)不符。
正确的配置方案
因为2.5小时的间隔没法用OnCalendar的单间隔规则直接表达,最可靠的方式是枚举所有符合要求的时间点——毕竟24小时内,符合“间隔2.5小时”的时间点是固定的:00:00、02:30、05:00、07:30、10:00、12:30、15:00、17:30、20:00、22:30。
修改后的timer文件如下:
[Unit] Description=Run every 2.5 Hours [Timer] # 枚举所有2.5小时间隔的时间点 OnCalendar=*-*-* 00:00,02:30,05:00,07:30,10:00,12:30,15:00,17:30,20:00,22:30:* Persistent=true [Install] WantedBy=timers.target
额外说明
如果你不想枚举这么多时间点,也可以尝试结合OnUnitActiveSec=9000s(因为2.5小时=9000秒),但这种方式依赖上一次任务的执行时间,如果系统重启或任务中断,可能会导致后续执行时间偏移。而枚举固定时间点的方式更稳定,能严格按照你想要的整点/半点循环执行。
备注:内容来源于stack exchange,提问作者ni_hao
相关产品推荐
相关产品推荐

