本来只想每天凌晨三点跑一次 上线后一天跑出六十条记录 全部集中在三点那一小时内 逐条对时间才看出频率不对。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,cron 五个字段的顺序是分 时 日 月 周 第一列写成星号就变成该小时内每分钟都触发 要写 0 3 才是三点整跑一次 两列的频率能差几十倍。

碰到「cron 表达式字段」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。报错里带路径的,先去看那个路径在不在、权限对不对。

# 每天 03:00 一次
0 3 * * * /bin/bash /opt/jobs/daily.sh
# 每小时第 3 分钟一次
3 * * * * /bin/bash /opt/jobs/hourly.sh

同一份配置存在多处的,先确认改的是被加载的那一份。

具体做法是,先在纸上按分时日月周的顺序 把每个字段的值排一遍;用在线表达式工具反推后面几次的具体触发时间;上线前把预期时间和实际排期对照 别凭印象判断。

最后用这个标准收尾,第二天看日志只有一条记录 时间落在三点整而不是三点内每分钟。

作者 9823189