# Cron 表达式速查表：5分钟掌握定时任务调度

2026-04-15

https://toolblip.com/blog/cron-expression-cheatsheet

# Cron 表达式速查表：5分钟掌握定时任务调度

Cron 表达式是控制定时任务的核心工具。每个开发者都应该掌握它的格式和用法。

## 标准格式（5段式）

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

## 特殊字符含义

| 字符 | 含义 | 示例 |
|------|------|------|
| `*` | 任意值 | `* * * * *` = 每分钟 |
| `,` | 列表 | `1,15,30 * * * *` = 每小时1/15/30分 |
| `-` | 范围 | `0 9-17 * * *` = 上午9点到下午5点每小时 |
| `/` | 间隔 | `*/15 * * * *` = 每15分钟 |
| `?` | 任意（仅用于日/星期） | 无冲突时替代 `*` |

## 常用示例

### 基础
| 表达式 | 含义 |
|--------|------|
| `0 * * * *` | 每小时整点 |
| `0 0 * * *` | 每天午夜 |
| `0 0 * * 0` | 每周日午夜 |
| `0 0 1 * *` | 每月1日午夜 |
| `*/5 * * * *` | 每5分钟 |

### 实用组合
| 表达式 | 含义 |
|--------|------|
| `0 9 * * 1-5` | 工作日早上9点 |
| `30 18 * * *` | 每天下午6:30 |
| `0 0 1,15 * *` | 每月1号和15号午夜 |
| `*/15 9-17 * * 1-5` | 工作日上班时间每15分钟 |
| `0 22 * * 1-5` | 工作日晚上10点 |
| `0 0 * * 0,6` | 周末午夜 |

## 为什么 cron 有两个 "日" 字段？

`日 (day-of-month)` 和 `星期 (day-of-week)` 可以同时指定。Crontab 默认是 **OR 逻辑** - 任一条件满足即执行。

```bash
# 每月1号 AND 周五都会跑（可能重复）
0 0 1 * *       # 每月1号
0 0 * * 5       # 每周五
# 这两个会同时生效
```

### 解决方案：问号 `?`
```bash
# 仅当月日指定，不关心星期
0 0 1 * ?
```

## 常见错误

### ❌ 忘记星期从0开始
```bash
# 周日 = 0，不是 7
0 0 * * 7       # 这个永远不会跑！
0 0 * * 0       # 正确
```

### ❌ 月份从1开始，不是0
```bash
# ❌ 错误
0 0 * 0 *       # 0月不存在
# ✅ 正确
0 0 * 1 *       # 1月
```

### ❌ 日和星期同时用 `*`
```bash
# ⚠️ 高风险：可能一天跑多次
0 0 * * *       # 日=任意 AND 星期=任意 = 每天
```

## 快速验证

👉 **[Cron 解析器 - 输入表达式查看下次运行时间 →](/tools/cron-parser)**

输入任何 cron 表达式，自动解析为人类可读描述，并显示接下来5次的计划执行时间。

## 工具推荐

| 工具 | 用途 |
|------|------|
| [Crontab.guru](https://crontab.guru) | 在线 cron 表达式编辑器 |
| [Cron Parser](/tools/cron-parser) | 验证 + 显示下次运行 |
| [Cron job monitor](https://healthcheck.io) | 监控定时任务是否执行 |

## Python / PHP 解析

```python
# Python
from croniter import croniter
cron = croniter('0 9 * * 1-5', datetime.now())
print(cron.get_next(datetime))
```

```php
// PHP
$cron = Cron\CronExpression('0 9 * * 1-5', new DateTime());
echo $cron->getNextRunDate()->format('Y-m-d H:i');
```

---

掌握 cron 表达式，让定时任务调度变得简单。记住 5 个字段，多练习 - 30分钟内你就能熟练运用。
