Cron 表达式格式说明
Cron 表达式是一个字符串,由 5 个或 6 个空格分隔的字段组成,表示时间集合。
| 字段 | 允许值 | 允许的特殊字符 |
|---|---|---|
| 分钟 (Minute) | 0-59 | , - * / |
| 小时 (Hour) | 0-23 | , - * / |
| 日期 (Day of Month) | 1-31 | , - * / ? L W |
| 月份 (Month) | 1-12 或 JAN-DEC | , - * / |
| 星期 (Day of Week) | 0-7 (0或7是周日) 或 SUN-SAT | , - * / ? L # |
常用 Cron 表达式示例
-
*/5 * * * *每隔 5 分钟执行一次 -
0 2 * * *每天凌晨 2 点执行 -
0 8 * * 1每周一早上 8 点执行 -
0 0 1,15 * *每月 1 号和 15 号执行 -
0 9-18 * * 1-5周一至周五,朝九晚六每小时整点执行
常见问题
Linux Crontab 也是 5 位吗?
是的,标准的 Linux Crontab 使用 5 个字段(分、时、日、月、周)。一些扩展实现(如 Quartz, Spring)才支持第 6 位(秒)或第 7 位(年)。本工具默认生成标准的
5 位格式。
星号 (*) 代表什么?
星号代表该字段的所有可能值。例如,在“小时”字段中,* 表示“每小时”。
“?” 和 “*” 有什么区别?
“*” 表示任意值,“?” 仅在“日期”和“星期”字段中使用,表示“不指定值”。当你在其中一个字段指定了具体值(如周一),为了避免冲突,另一个字段(日期)通常设为
“?”(Quartz标准),但在 Linux Crontab 中通常不区分,全用 “*” 即可。
如何设置每隔 30 分钟执行?
使用斜杠 `/` 表示步长。例如 `*/30 * * * *` 表示从第 0 分钟开始,每隔 30 分钟执行一次(即 00:00, 00:30, 01:00...)。
如何设置仅在工作日执行?
在“星期”字段使用 `1-5`(周一到周五)。完整表达式如 `0 9 * * 1-5` 表示工作日早上 9 点。
Cron 不执行是什么原因?
常见原因包括:1. 脚本没有执行权限(chmod +x);2. 环境变量问题(Cron 运行环境通常没有完整的 PATH,建议使用绝对路径);3. 服务器时区设置与你预期的不一致。
能够精确到秒吗?
标准的 Linux Crontab 最细粒度是分钟。如果需要秒级调度,通常使用 `sleep` 命令配合(例如 `sleep 30; command`)或使用支持秒级的调度器(如
Quartz, Systemd timer, Go-Cron)。
L, W, # 这些字符是什么意思?
这些是扩展字符,主要用于 Quartz 等高级调度器。L 表示最后(Last,如 31 号或周六);W 表示最近的工作日(Weekday);# 用于指定第几个星期(如 6#3
表示第三个周五)。Linux Crontab 通常不支持这些。