Crontab表达式怎么写?5分钟掌握定时任务配置
Linux定时任务是后端开发和运维最常用的功能之一,但Crontab表达式的语法让很多人头疼—— "0 2 * * *"到底是每天凌晨2点还是每小时2分?"*/5 * * * *"和"0,5,10,15,20,25,30,35,40,45,50,55 * * * *"有什么区别? 这篇文章用几个实际例子帮你彻底搞懂Crontab表达式。
Crontab表达式的5个字段
一个标准的Crontab表达式由5个字段组成,从左到右依次是:
- 分钟(0-59):第几分钟执行
- 小时(0-23):第几小时执行
- 日期(1-31):每月第几天执行
- 月份(1-12):第几月执行
- 星期(0-7):星期几执行(0和7都代表周日)
每个字段都可以用特殊符号来灵活指定时间:
- *:代表所有值,比如分钟字段写*表示每分钟
- /:代表步长,比如*/5在分钟字段表示每5分钟
- ,:代表列表,比如1,15,30在分钟字段表示第1、15、30分钟
- -:代表范围,比如1-5在星期字段表示周一到周五
10个最常用的Crontab表达式
以下是实际开发中最常用的定时任务配置,直接复制就能用:
- 每分钟执行:
* * * * * - 每5分钟执行:
*/5 * * * * - 每小时执行:
0 * * * * - 每天凌晨0点执行:
0 0 * * * - 每天凌晨2点执行:
0 2 * * * - 每周一凌晨执行:
0 0 * * 1 - 每月1号执行:
0 0 1 * * - 工作日每天9点执行:
0 9 * * 1-5 - 每15分钟执行:
*/15 * * * * - 每季度第一天执行:
0 0 1 1,4,7,10 *
用Crontab生成器可视化配置
手写表达式容易出错,特别是涉及到日期和星期的组合逻辑。用Crontab表达式计算器可以可视化配置:
- 选择"每几分钟"、"每天几点"、"每周几"等选项,工具自动生成表达式
- 输入已有表达式,工具自动解析并显示中文含义和下次执行时间
- 支持6位表达式(含秒),兼容Quartz等框架
常见坑:日期和星期的冲突
Crontab中日期和星期字段是"或"的关系,不是"且"。比如0 0 1 * 1表示每月1号或每周一执行,
而不是"每月1号且是周一才执行"。如果需要"且"的逻辑,需要在脚本里自行判断。
小结
Crontab表达式记不住没关系,收藏Crontab表达式计算器, 需要的时候可视化配置就行。如果你的定时任务涉及时区转换,还可以配合时区转换器使用。