0 2 * * *
tz: Asia/Shanghai · timeout 10m · concurrencyPolicy: Forbid · 失败 → page 值班清理跑了 90 分钟时,02:00 的下一轮被锁跳过(SKIPPED),不会两份并发删;某次抛异常 → 告警带 job id 和触发时间,值班沿 log 5 分钟定位到 DB 连接池打满,回滚连接配置。时区写死,部署到任何环境都跑在业务侧凌晨。
数据与服务 · 运行与可靠性
cron 用一条 5 段时间表达式 + 固定时区反复触发任务;任务要幂等、防重叠、失败必告警,长时或实时任务用 worker / 队列。
cron 用一条 5 段表达式 + 固定时区决定“几点在哪个时区跑”。在这里拼表达式,点「推进 1 小时」在模拟一周里看它何时触发;叠「防重叠锁 / 慢任务」看重叠,叠「注入运行失败」看告警为什么必须发出——这些都是真实 cron 任务最常踩的坑。
现实里 crontab -e(或 Kubernetes CronJob)写一条 5 段表达式,调度器按它反复触发——这是第 0 步。这里拼表达式、点「推进 1 小时」在模拟一周里看它何时触发;叠「防重叠锁 / 慢任务」看重叠,叠「注入运行失败」看告警为什么必须发出。
0 02 * * *每天 02:00时区 Asia/Shanghai(声明时区;夏令时会让“每天 02:00”在切换日少跑或多跑一次)02步进会离开预设变成自定义(如每天 03:00)。当前 周一 00:00,时区 Asia/Shanghai。表达式「每天 02:00」本周将触发 7 次,下一次 周一 02:00。下一步:点主操作「推进 1 小时」推进模拟时钟,命中触发时刻会生成一条 run 卡。
提示:Tab 在按钮 / 复选框间移动,Enter / 空格触发。重点三组对照——「推进到下一次触发」看 run 卡 RUNNING→SUCCESS;开「慢任务」+ 关「防重叠锁」再触发看 DOUBLE,再勾回锁看 SKIPPED;点「注入运行失败」看告警卡为什么必须发出。
面板把表达式、时区、防重叠和告警演给你看了,这里命名清楚,并补无法直接操作的部分。
0 2 * * * = “每天 02:00”:分=0、时=2,日/月/周是 * 代表“每个”。* 是“都行”,数字是“正好这个”,*/5 是“每 5 分钟”,1-5 是“周一到周五”。Asia/Shanghai;夏令时切换日,欧洲时区的“每天 02:00”会少跑或多跑一次,部署在哪个时区就按哪个时区声明。从“这件事需不需要按时间表反复跑”出发,不是所有后台活都该塞进 cron。
一条凌晨清理任务,从写表达式到能告警,只走这几步。
0 2 * * * + Asia/Shanghai,避免“9 点是哪个 9 点”的歧义。只改一处关键选择,结果差很多。这是 cron 设计里最该记住的一组对照。
0 2 * * *
tz: Asia/Shanghai · timeout 10m · concurrencyPolicy: Forbid · 失败 → page 值班清理跑了 90 分钟时,02:00 的下一轮被锁跳过(SKIPPED),不会两份并发删;某次抛异常 → 告警带 job id 和触发时间,值班沿 log 5 分钟定位到 DB 连接池打满,回滚连接配置。时区写死,部署到任何环境都跑在业务侧凌晨。
0 2 * * *
# 无时区 · 无 timeout · 无告警服务器是 UTC,02:00 实际是业务侧 10:00——清理在用户高峰期跑;任务偶尔跑超 1 小时,两份并发删同一批链接,把还在用的也删了;2am 一次 DB 超时失败,没人收到通知,第二天用户反馈“我的链接没了”,团队比用户晚 6 小时知道。
你的 cron 清理任务跑在 Asia/Shanghai,表达式 `0 2 * * *`,但最近两次执行都接近 1 小时。今晚最该先做的两件事是?
术语的技术定义和行为以这些一手或权威资料为准。
和本知识点经常一起出现的概念。