Cron 语法速查表:完整参考指南
Cron 是类 Unix 操作系统中基于时间的作业调度器。无论您是设置后台任务的开发人员,还是管理服务器维护的 DevOps 工程师,理解 Cron 表达式语法 都是必不可少的。
本指南提供了 cron 字段、特殊字符和实际示例的完整分解,帮助您自信地调度任务。
1. Cron 表达式格式
标准 cron 表达式由五个字段组成(在某些系统(如 Quartz 或 Jenkins)中为六个)。
┌───────────── 分钟 (0 - 59)
│ ┌───────────── 小时 (0 - 23)
│ │ ┌───────────── 每月几号 (1 - 31)
│ │ │ ┌───────────── 月份 (1 - 12)
│ │ │ │ ┌───────────── 星期几 (0 - 6) (周日至周六)
│ │ │ │ │
* * * * *
2. 特殊字符参考
| 字符 | 说明 | 示例 |
|---|---|---|
* |
任意值:匹配该字段的每一个可能的值。 | * * * * * (每分钟) |
, |
值列表分隔符:指定一个值列表。 | 0,15,30,45 (每 15 分钟) |
- |
值范围:指定从 X 到 Y 的范围。 | 9-17 (从上午 9 点到下午 5 点) |
/ |
步进值:指定增量。 | */15 (每 15 分钟) |
L |
最后 (Last):指定月份或星期的最后一天。 | 5L (本月最后一个周五) |
W |
工作日 (Weekday):指定最接近某日期的工作日 (周一至周五)。 | 15W (最接近 15 号的工作日) |
# |
每月第 N 天:指定星期几的第几次出现。 | 6#3 (每月第三个周六) |
3. 常用 Cron 示例
| 频率 | 表达式 | 说明 |
|---|---|---|
| 每分钟 | * * * * * |
每分钟运行一次任务。 |
| 每小时 | 0 * * * * |
每小时开始时运行。 |
| 每天午夜 | 0 0 * * * |
每天 00:00 运行一次。 |
| 每周日凌晨 4 点 | 0 4 * * 0 |
非常适合每周备份。 |
| 每 15 分钟 | */15 * * * * |
在 :00, :15, :30, 和 :45 运行。 |
| 工作时间 (9-5) | 0 9-17 * * 1-5 |
在工作日每小时运行一次。 |
4. crontab -e vs crontab -l
crontab 命令用于管理您的个人 cron 任务。
crontab -e: 打开您的个人 crontab 文件进行编辑。如果是第一次,可能会要求您选择编辑器(如 nano 或 vim)。crontab -l: 列出当前用户的所有活动 cron 任务。crontab -r: 移除您所有的当前 cron 任务。请谨慎使用!
5. 可视化您的任务计划
阅读原始 cron 表达式可能很困难。这就是我们构建 Cron 定时任务可视化工具 的原因。
我们的工具可以帮助您:
- 解析表达式:立即将
0 4 * * 0翻译为“在周日的 04:00”。 - 下次运行时间:根据您的时区查看接下来的 5 次计划执行时间。
- 人类可读的描述:不再需要猜测
*/5 9-17 * * 1-5是什么意思。
FAQ:Cron 任务故障排除
问:为什么我的 cron 任务没有运行?
答:最常见的原因是 环境变量。Cron 在极简的 shell 环境中运行。务必在命令中使用绝对路径(例如,使用 /usr/bin/python3 而不是 python3),并将输出记录到文件中:* * * * * /path/to/script.sh >> /var/log/cron.log 2>&1。
问:systemd timer 替代方案是什么?
答:现代 Linux 发行版(如 Ubuntu、Fedora)建议使用 systemd timers 代替 cron。它们通过 journalctl 提供更好的日志记录、依赖关系管理和更灵活的调度,尽管配置相对复杂。
问:如何处理 cron 中的时区问题?
答:默认情况下,cron 在系统的本地时区运行(服务器上通常是 UTC)。某些系统允许您在 crontab 文件顶部设置 CRON_TZ=Asia/Shanghai,但最可靠的方法是将服务器时钟同步到所需的时区。
Tool3M 相关工具
- Cron 解析与可视化:立即验证并可视化您的 cron 表达式。
- JSON 格式化:格式化可能包含 cron 字符串的配置文件。
- 时间戳转换:在不同格式和时区之间转换执行时间。