什么是 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 表达式的步骤

  1. 打开 Cron 表达式生成器,选择表达式格式(5 段 / 6 段)。
  2. 用下拉框和输入框分别设置分、时、日、月、周,或直接粘贴已有表达式进行解析。
  3. 查看「下次执行时间」预览,确认触发时机符合预期。
  4. 点击「复制」得到表达式,粘贴到 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 段表达式(部分平台支持)或循环脚本实现。