在 Ubuntu(以及大多数 Linux 系统)上,**“定时器延迟执行”**通常不是 bug,而是由系统机制或配置方式导致的。下面按常见原因系统说明,并给出排查方法。
*/5 * * * * /path/script.sh
:00、:05,但系统负载高时会延后几秒到几十秒✅ 如果你需要秒级定时,请用 systemd timer 或 sleep 循环。
cron 执行时:
PATH⚠️ 表现:
✅ 建议:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
* * * * * /bin/bash /path/script.sh >> /var/log/cron.log 2>&1
如果:
cron 可能基于“错误时间”触发
✅ 检查:
timedatectl
✅ 开启同步:
sudo timedatectl set-ntp true
OnCalendar 的语义[Timer]
OnCalendar=*-*-* 02:00:00
✅ 想“错过也补执行”:
Persistent=true
systemd timer 默认不会在唤醒后立刻补执行
✅ 解决:
WakeSystem=truesystemd-inhibitAccuracySec=1min
systemd 会合并定时器,节省资源
✅ 精确执行:
AccuracySec=1s
很多人只启用了 .service,忘了 .timer
✅ 检查:
systemctl list-timers
✅ 启用:
systemctl enable --now mytimer.timer
即使定时器触发了:
脚本也会排队延迟执行
✅ 查看:
top
iostat
journalctl -u your.service
常见误区:
✅ 快速验证:
* * * * * date >> /tmp/cron_test.log
如果你愿意,可以把:
ubuntu 20.04 / 22.04)贴出来,我可以帮你精确判断是哪一种原因。