什么是 Cron 表达式
Cron 是 Unix/Linux 下的定时任务调度工具,通过 crontab -e 编辑任务列表。每条任务由一个 Cron 表达式和要执行的命令组成,表达式用 5 个空格分隔的字段描述执行时间:
分 时 日 月 周 命令
*/5 * * * * /usr/bin/backup.sh
上面的例子表示每 5 分钟执行一次备份脚本。除了 Linux crontab,很多现代系统也使用类似语法:Kubernetes 的 CronJob、Spring 的 @Scheduled、各类云平台的定时触发器,只是字段数量和含义略有差异。
字段含义速查表
| 字段 | 取值范围 | 允许的特殊字符 | 说明 |
|---|---|---|---|
| 分 | 0-59 | * , - / | 第几分钟执行 |
| 时 | 0-23 | * , - / | 第几小时执行 |
| 日 | 1-31 | * , - / ? | 每月第几天(? 表示不指定) |
| 月 | 1-12 或 JAN-DEC | * , - / | 第几月执行 |
| 周 | 0-7 或 SUN-SAT | * , - / ? | 星期几(0 和 7 都表示周日) |
特殊字符含义:* 任意值,, 枚举多个值,- 范围,/ 步长。例如 0 9-18 * * 1-5 表示工作日(周一至周五)每小时整点执行,即每天 9:00 到 18:00。
在线生成 Cron 表达式的步骤
- 打开 Cron 表达式生成器,选择表达式格式(5 段 / 6 段)。
- 用下拉框和输入框分别设置分、时、日、月、周,或直接粘贴已有表达式进行解析。
- 查看「下次执行时间」预览,确认触发时机符合预期。
- 点击「复制」得到表达式,粘贴到 crontab、CronJob 或云平台配置中。
可视化配置最大的好处是避免手写失误——尤其是星期和日期同时设置时的「或」关系,容易让人误解成「且」。
常用表达式示例
| 表达式 | 执行时机 |
|---|---|
0 3 * * * | 每天凌晨 3:00 |
*/10 * * * * | 每 10 分钟 |
0 9 * * 1-5 | 工作日每天 9:00 |
0 0 1 * * | 每月 1 日 0:00 |
30 2 * * 0 | 每周日 2:30 |
0 */4 * * * | 每 4 小时整点 |
常见坑与注意事项
- 日与周是「或」关系:Linux crontab 中同时指定日和周,任一匹配就会执行,容易导致任务比你预期更频繁。
- 时区问题:crontab 使用系统时区,容器和云函数可能使用 UTC,配置前确认时区,否则任务会在错误的时刻运行。
- 环境变量:cron 执行时的 PATH 和手动终端不同,脚本里尽量使用绝对路径,必要时在脚本开头导出环境变量。
- 秒级任务:标准 crontab 最小粒度是分钟,秒级需要借助 6 段表达式(部分平台支持)或循环脚本实现。
