Crontab 表达式手册

更新于 2026年7月25日

适用人群:需要配置Linux定时任务、排查crontab不生效问题的开发者和运维人员。

核心概念

5字段结构

*     *     *     *     *
分钟  小时  日期  月份  星期
(0-59)(0-23)(1-31)(1-12)(0-7,0和7都表示周日)

每个字段可用以下特殊符号:

符号 含义
* 匹配该字段所有可能取值(每分钟/每小时等)
, 列举多个离散值,如1,15表示第1和第15
- 表示范围,如1-5表示1到5
/ 表示步长,如*/5表示每隔5个单位执行一次
空格 分隔5个字段,字段间不可颠倒顺序

常用示例对照表

Crontab表达式 含义
* * * * * 每分钟执行一次
*/5 * * * * 每5分钟执行一次
0 * * * * 每小时整点执行一次
0 0 * * * 每天0点执行一次
0 2 * * * 每天凌晨2点执行一次
0 0 * * 0 每周日0点执行一次
0 0 1 * * 每月1号0点执行一次
0 0 1 1 * 每年1月1日0点执行一次(年度任务)
0 9-18 * * 1-5 工作日(周一到周五)9点到18点每小时执行一次
30 3 * * 6 每周六凌晨3点30分执行一次

常见坑

  • 日期字段(第3位)和星期字段(第5位)是"或"关系,同时设置具体值时任一条件满足即触发,容易误以为是"且"关系。
  • crontab默认使用系统时区,跨时区服务器排查"任务提前/延后几小时"问题时要先确认服务器时区设置。
  • crontab任务的执行环境PATH等变量与交互式shell不同,脚本中最好使用绝对路径,避免"手动执行正常、定时不执行"的问题。

对应工具

常见问题

"0 0 1 * *"和"0 0 * * 1"分别是什么意思?
前者是每月1号0点执行(日期字段生效);后者是每周一0点执行(星期字段生效),两者语义完全不同,容易混淆。
为什么crontab里脚本手动跑没问题,定时执行就报错?
多因定时任务执行环境的环境变量(尤其PATH)与交互式登录shell不同,脚本中调用的命令或文件建议使用绝对路径。

相关教程

官方资料来源