</>YZIF
博客

高级 Cron 语法:15 个实用示例覆盖所有调度场景

2026-06-18

超越基础 Cron

了解了 5 字段格式后,真正的挑战是为你的用例编写正确的表达式。以下是带有解释的高级模式。

常见高级模式

模式表达式执行时间
每 15 分钟`*/15 * * * *`:00, :15, :30, :45
每 2 小时`0 */2 * * *`午夜、2AM、4AM...
每 6 小时`0 */6 * * *`午夜、6AM、中午、6PM
每天指定时间执行两次`0 8,20 * * *`上午 8:00 和 晚上 8:00
工作日上午 9:30`30 9 * * 1-5`仅工作日
每周一和周四`0 0 * * 1,4`周一和周四午夜
每月 1 号`0 0 1 * *`每月 1 号午夜
每月 15 号和最后一天`0 0 15,L * *`15 号和月末午夜
每季度(1月、4月、7月、10月)`0 0 1 1,4,7,10 *`季度首月 1 号

重要:步长值限制

Cron 的步长值如 `*/90` 在分钟字段中**不能按预期工作**。分钟字段只支持 0-59。`*/90` 会被计算为 `0`(因为 90 ≥ 60,发生回绕)。对于超过 59 分钟的间隔,使用特定的小时/分钟组合:

# 每 90 分钟 — 无法原生实现
# 解决方法:使用两个显式时间
0 0,2,4,6,8,10,12,14,16,18,20,22 * * *
30 1,3,5,7,9,11,13,15,17,19,21,23 * * *

实际应用示例

每小时数据库备份
0 * * * * /usr/bin/pg_dump mydb > /backups/db.sql

午夜日志轮转
0 0 * * * /usr/sbin/logrotate /etc/logrotate.conf

每 5 分钟健康检查
*/5 * * * * curl -sS https://example.com/health

每月 1 号凌晨 3 点生成报表
0 3 1 * * /opt/scripts/generate-report.sh

一个 crontab 中的多个调度
# 每 6 小时清理临时文件
0 */6 * * * /usr/bin/find /tmp -type f -atime +1 -delete
# 工作日上午 8 点发送摘要邮件
0 8 * * 1-5 /opt/send-digest.sh
# 每季度首月 1 号进行全面系统审计
0 2 1 1,4,7,10 * /opt/audit.sh

测试你的 Cron 表达式

使用 YZIF 的 Cron 解析器 即时解码任何 cron 表达式。粘贴你的模式,查看确切的执行时间,支持中英文显示。