高级 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 * * * * /usr/bin/pg_dump mydb > /backups/db.sql午夜日志轮转
0 0 * * * /usr/sbin/logrotate /etc/logrotate.conf
0 0 * * * /usr/sbin/logrotate /etc/logrotate.conf每 5 分钟健康检查
*/5 * * * * curl -sS https://example.com/health
*/5 * * * * curl -sS https://example.com/health每月 1 号凌晨 3 点生成报表
0 3 1 * * /opt/scripts/generate-report.sh
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
# 每 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 表达式。粘贴你的模式,查看确切的执行时间,支持中英文显示。