RunToolz iconRunToolz
Welcome to RunToolz!
Cron自动化DevOps

Cron表达式:调度任何东西不用猜

那些神秘的cron调度字符串终于解释清楚了。从五个字段的含义到常见调度模式,学习编写第一次就能正确运行的cron表达式。

RunToolz Team2026年1月25日4 min read

0 0 * * * — 这是什么意思?

如果你用过AWS Lambda、GitHub Actions或任何任务调度器,你见过cron表达式。五个或六个神秘的字段,不知怎么就调度了任务。

它们没看起来那么复杂。

五个字段

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

每个字段限制任务何时运行。*表示"每个"。数字表示"只有那个值"。

想亲自试试吗?解析Cron表达式

阅读示例

0 0 * * * — 分钟0,小时0,任何日期,任何月,任何工作日 = 每天午夜

30 8 * * 1-5 — 上午8:30,周一到周五 = 工作日早晨

0 */2 * * * — 每2小时 = 凌晨2点,4点,6点...

0 9 1 * * — 每月1日上午9点 = 月度报告时间

特殊字符

* — 每个值(每分钟,每小时等)

, — 多个值。1,15表示1日和15日。

- — 范围。1-5表示1到5。

/ — 步长。*/15表示每15。分钟字段中的*/15 = 每15分钟。

常见模式

每5分钟: */5 * * * *

每小时的30分: 30 * * * *

每天凌晨3点: 0 3 * * *

每周日午夜: 0 0 * * 0

每月1日上午9点: 0 9 1 * *

工作日下午6点: 0 18 * * 1-5

坑点

周中的日 vs 月中的日。 如果你同时设置两者,大多数系统会OR它们。0 0 1 * 1在1日和每个周一运行,而不是只在是1日的周一。

时区很重要。 大多数cron系统使用服务器时间或UTC。知道你在处理哪一个。

6字段 vs 5字段。 有些系统在开头添加秒字段。0 0 0 * * *在有秒字段时是午夜。

周日 = 0或7。 取决于系统。两者通常都适用于周日。

部署前测试

别猜0 0 */2 * *是每2天运行还是每2小时。使用cron解析器。

检查几个预期的触发时间。确保它们符合你的意图。

对于关键任务,设置监控。一个字段错误的cron表达式可能让你的每日任务每小时运行——或者你的每小时任务每年运行。

Cron的替代品

英语语法。 有些调度器接受"每天下午3点"而不是0 15 * * *。更清晰但可移植性差。

速率表达式。 AWS使用rate(5 minutes)和cron表达式一起。对简单间隔更容易。

Systemd定时器。 Linux cron替代品,有更好的日志记录和依赖管理。


Cron表达式很密集但可学习。五个字段,每个限制任务何时运行。测试你的表达式,注意时区,你就能可靠地调度任何东西。