Cron 表达式完整教程:语法、示例与常见问题

最后更新:2026年5月 · 阅读时间:10分钟

在线 Cron 表达式生成器

可视化编辑 Cron 表达式,实时查看下次执行时间

打开生成器

什么是 Cron?

Cron 是 Linux/Unix 系统中的定时任务调度程序。通过编写 Cron 表达式,你可以指定任务在什么时候自动执行,例如"每天凌晨3点备份数据库"或"每5分钟检查一次服务状态"。

Cron 表达式虽然功能强大,但语法让很多开发者头疼。本教程将帮你彻底理解它。

Cron 表达式语法

标准 Cron 表达式由 5 个字段组成,用空格分隔:

┌──────── 分钟 (0-59)
│ ┌────── 小时 (0-23)
│ │ ┌──── 日期 (1-31)
│ │ │ ┌── 月份 (1-12)
│ │ │ │ ┌─ 星期 (0-6, 0=周日)
│ │ │ │ │
* * * * *

各字段取值范围

字段含义取值范围说明
分钟第几分钟执行0-59
小时第几小时执行0-230 = 午夜
日期每月第几天执行1-31
月份第几月执行1-12也可用 JAN-DEC
星期每周第几天执行0-60=周日, 也可用 SUN-SAT

特殊字符

星号 *

匹配所有值。如分钟字段使用 * 表示每分钟。

逗号 ,

列举多个值。如 1,15,30 表示第 1、15、30 分钟。

# 每天的 9:00 和 18:00 执行
0 9,18 * * *

连字符 -

指定范围。如 1-5 表示 1 到 5。

# 工作日每小时执行
0 * * * 1-5

斜杠 /

指定间隔。如 */5 表示每 5 个单位,0-30/10 表示从 0 开始每 10 个单位。

# 每 5 分钟执行
*/5 * * * *

# 每小时第 0 和 30 分钟执行(从 0 开始每 30 分钟)
0,30 * * * *

常用示例

表达式含义
* * * * *每分钟
*/5 * * * *每 5 分钟
0 * * * *每小时
0 */2 * * *每 2 小时
0 0 * * *每天午夜
0 3 * * *每天凌晨 3 点
0 0 * * 0每周日午夜
0 0 1 * *每月 1 日午夜
0 0 1 1 *每年 1 月 1 日午夜
0 9 * * 1-5工作日早上 9 点
30 6 * * 1每周一早上 6:30
0 */6 * * *每 6 小时
0 8,12,18 * * *每天 8:00、12:00、18:00
0 0 1,15 * *每月 1 日和 15 日午夜

5 位 vs 6 位 vs 7 位 Cron

不同系统的 Cron 表达式格式不同:

格式字段使用场景
5 位分 时 日 月 周Linux crontab、标准 Cron
6 位秒 分 时 日 月 周Spring、Quartz、AWS EventBridge
7 位秒 分 时 日 月 周 年Quartz 完整格式

提示:我们的Cron 表达式生成器支持 5 位和 6 位格式,可视化编辑并显示下次执行时间。

常见问题

日期和星期同时指定会怎样?

如果日期和星期字段都不是 *,则两者是的关系。例如 0 0 1 * 5 表示每月 1 日每周五执行,而不是每月 1 日且是周五才执行。

Cron 表达式如何处理月末?

标准 Cron 不支持"L"(最后一天)。如需在月末执行,需要配合脚本判断:

# 每月 28-31 日执行,脚本内判断是否为最后一天
0 0 28-31 * * [ "$(date +\%d -d tomorrow)" = "01" ] && your_command

Cron 的时区问题

Linux crontab 默认使用系统时区。如需使用其他时区:

CRON_TZ=America/New_York
0 9 * * * your_command

如何查看 Cron 执行日志?

# 查看 cron 日志
sudo tail -f /var/log/cron
# 或查看系统日志
journalctl -u cron

试试我们的 Cron 生成器

可视化编辑表达式,自动计算下次执行时间

打开 Cron 表达式生成器