Cron 表达式教程:字段含义、常用写法和在线生成工具
定时备份数据库、每天早上推送日报、每 5 分钟检查一次服务状态,这些任务在服务器上通常用 Cron 来安排。Cron 表达式只有一行,但写错一个字段,任务可能永远不执行,或者每分钟执行一次。本文讲清基本写法,并演示用 Cron 表达式生成器 和 Cron 表达式解析 生成和检查表达式。
5 个字段
标准(Linux crontab)Cron 表达式由 5 个字段组成,用空格分隔:
| 位置 | 字段 | 取值范围 |
|---|---|---|
| 1 | 分钟 | 0–59 |
| 2 | 小时 | 0–23 |
| 3 | 日 | 1–31 |
| 4 | 月 | 1–12 |
| 5 | 星期 | 0–6(0 表示星期日,多数实现中 7 也表示星期日) |
4 个常用符号
*:任意值,例如小时写 * 表示每个小时;,:列举多个值,例如1,15表示 1 号和 15 号;-:范围,例如星期写1-5表示周一到周五;/:步长,例如分钟写*/5表示每 5 分钟。
常用示例
| 表达式 | 含义 |
|---|---|
*/5 * * * * | 每 5 分钟 |
0 * * * * | 每小时整点 |
0 0 * * * | 每天午夜 0 点 |
30 8 * * 1-5 | 工作日早上 8:30 |
0 9 * * 1 | 每周一早上 9 点 |
0 0 1 * * | 每月 1 号 0 点 |
0 2 * * 0 | 每周日凌晨 2 点 |
用工具生成和检查
- 选择预设或逐项设置:打开 Cron 表达式生成器,可以直接选“每 5 分钟”“工作日 8:30”“每月 1 日”等预设,也可以分别设置分钟、小时、日、月、星期。
- 看说明和执行时间:页面会显示表达式的中文说明和未来 5 次执行时间,确认和预期一致。
- 复制使用:点击“复制”,粘贴到 crontab 或任务配置里。
- 检查已有表达式:拿到别人写的表达式,粘贴到 Cron 表达式解析,查看含义和接下来 5 次执行时间。

⏲️ Cron 表达式生成器
免费在线使用,文件和数据只在你的浏览器本地处理,无需注册。
常见的坑
- 字段数量不同:Linux crontab 是 5 个字段;Quartz、Spring 的 @Scheduled 等通常在最前面多一个“秒”字段(6 位,Quartz 还可以有第 7 位“年”),并用 ? 表示“不指定”。把 5 位表达式直接用在这些框架里会出错,反之亦然。
- 日和星期同时设置:在标准 cron 中,“日”和“星期”都不是 * 时,两者是“或”的关系,例如
0 0 1 * 1表示每月 1 号或每周一都执行,而不是“每月 1 号且恰好是周一”。 - 时区:cron 按服务器的时区运行。服务器用 UTC 时,北京时间 8:30 要写成 UTC 的 0:30。
- 分钟字段写成星号:想“每天 8 点执行一次”,应写
0 8 * * *;写成* 8 * * *会在 8 点到 8:59 之间每分钟执行一次。 - 任务没有输出:cron 环境变量与登录终端不同,脚本里尽量使用绝对路径,并把输出重定向到日志文件,方便排查。
常见问题
Cron 表达式 */5 * * * * 是什么意思?
表示每 5 分钟执行一次,即每小时的第 0、5、10……55 分钟。
工作日早上 9 点怎么写?
写成 0 9 * * 1-5,表示周一到周五的 9:00。
Linux 的 cron 和 Java 的 Quartz 表达式一样吗?
不完全一样。Linux crontab 是 5 个字段;Quartz 和 Spring 通常在开头多一个“秒”字段,并支持 ? 等特殊字符,需要按框架的规则书写。
怎样确认表达式写对了?
把表达式粘贴到 Cron 表达式解析工具,查看中文说明和接下来 5 次执行时间是否符合预期。