星期·日冲突、间隔误解、任务重叠
1. 星期编号混淆 — 在 cron 中,星期从 0 到 6,其中 0 是星期日。许多实现也接受 7 作为星期日,但把 1 误当成星期日、从而整体错开一天的错误很常见。星期一是 1,星期五是 5。
2. 同时指定日(day-of-month)和星期(day-of-week) — 如果把这两个字段都指定为非 * 的值,大多数 cron 会在两者中任一匹配时执行(是 OR 而非 AND)。例如 0 0 13 * 5 会在「13 日或每周五」执行,而不是「仅在 13 日的星期五」。
3. 对 */n 间隔的误解 — */15 是从 0 开始每隔 15,即在第 0·15·30·45 分执行。若使用像 */40 这样不能整除 60 的值,则只在第 0 分和第 40 分执行,之后会跳到下一个小时的第 0 分,间隔变得不规则。
4. 时区误判 — cron 通常按服务器时区(大多为 UTC)运行。若按本地时间编写表达式,实际会在不同的时间执行。时区将在下方的单独指南中详细讲解。
5. 任务重叠 — 若执行时间超过下一次预约时刻,可能在上一个任务结束前又启动新任务。对耗时较长的任务,同时设置锁(lock)或防止重复执行更为稳妥。请用上方工具的下次执行时间预先验证您编写的表达式。