Cron定时任务不执行
一句话:定时任务到了时间却没跑,常见原因是时区、表达式、部署环境、权限或进程未启动。
它是什么
Cron定时任务不执行是自动化项目里很常见的问题。它可能发生在服务器crontab、Node定时任务、GitHub Actions、Vercel Cron、云函数定时触发等场景。
适合干什么
- 做自动日报、数据同步、定时抓取的人
- 使用服务器或云平台定时任务的开发者
- 部署后发现本地能跑线上不跑的人
- 需要排查时区问题的新手
不适合干什么
- 用户手动点击触发的普通任务
- 队列任务失败但不是按时间触发
- 没有任何日志记录的定时逻辑
普通人怎么用
- 检查cron表达式
- 确认服务器或平台时区
- 确认任务进程是否启动
- 查看平台执行日志
- 手动触发一次验证代码是否正常
进阶用户怎么用
- 给定时任务增加开始和结束日志
- 记录任务执行ID
- 设置失败告警
- 把长任务拆成队列任务
- 避免多实例重复执行
常见误区
- 忽略UTC和本地时区差异
- 以为部署后进程会自动常驻
- 任务没有日志,失败也不知道
- 多台机器同时执行导致重复处理
和相似工具的区别
- Cron不执行 vs 任务执行失败:不执行是触发阶段出问题,执行失败是触发后代码运行出问题。
- Cron定时任务 vs 队列任务:Cron按时间触发,队列任务按事件或积压任务触发。
入门步骤
- 确认表达式含义
- 确认运行环境和时区
- 手动运行任务函数
- 查看部署平台日志
- 增加心跳或告警
推荐工具(第三方)
Linux crontab、GitHub Actions、Vercel Cron、node-cron、Cloudflare Workers