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不同,脚本中调用的命令或文件建议使用绝对路径。
相关教程
官方资料来源