Make Tools
2026-04-11

Cron 表达式详解:像专家一样调度任务

从基础模式到高级调度,掌握 cron 语法。解析、调试和创建 cron 表达式,用于 Linux、Kubernetes 和 CI/CD。

Cron运维Linux

什么是 Cron 表达式?

Cron 表达式是一种紧凑的字符串,用于定义周期性任务的调度。源自 Unix 的 cron 守护进程,这种格式已成为调度的通用标准——用于 Linux crontab、Kubernetes CronJob、CI/CD 流水线和云函数。

标准 cron 表达式有五个字段:分钟 小时 日 月 星期。我们的 Cron 解析器 将任何 cron 表达式翻译为通俗易懂的中文,并显示未来的执行时间。

Cron 表达式语法

┌───────────── 分钟 (0–59)
│ ┌───────────── 小时 (0–23)
│ │ ┌───────────── 日 (1–31)
│ │ │ ┌───────────── 月 (1–12)
│ │ │ │ ┌───────────── 星期 (0–7, 0 和 7 = 周日)
│ │ │ │ │
* * * * *

特殊字符

  • * — 任意值(每分钟、每小时等)
  • , — 值列表:1,3,5
  • - — 范围:1-5(周一到周五)
  • / — 步长:*/15(每 15 个单位)

常用 Cron 模式

以下是你最常用的表达式:

*/5 * * * *      每 5 分钟
0 * * * *        每小时整点
0 9 * * *        每天上午 9:00
0 9 * * 1-5      工作日上午 9:00
0 0 1 * *        每月 1 日午夜
0 0 * * 0        每周日午夜
30 6,18 * * *    每天上午 6:30 和下午 6:30
0 */2 * * *      每 2 小时

Cron 实际应用

Linux Crontab

使用 crontab -e 编辑你的 crontab,每行添加一个表达式:

# 每天凌晨 3:00 运行备份脚本
0 3 * * * /home/user/scripts/backup.sh >> /var/log/backup.log 2>&1

# 每周日凌晨 2:00 清理临时文件
0 2 * * 0 find /tmp -type f -mtime +7 -delete

# 每 5 分钟发送健康检查
*/5 * * * * curl -sf https://api.example.com/health || echo "Down!" | mail -s "Alert" [email protected]

Kubernetes CronJob

apiVersion: batch/v1
kind: CronJob
metadata:
  name: data-sync
spec:
  schedule: "0 */6 * * *"   # 每 6 小时
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: sync
            image: data-sync:latest
          restartPolicy: OnFailure

GitHub Actions

# .github/workflows/cleanup.yml
name: Cleanup
on:
  schedule:
    - cron: '0 0 * * 0'   # 每周日
jobs:
  clean:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: ./scripts/cleanup.sh

扩展 Cron:6 位和 7 位格式

有些系统将 cron 扩展为 6 位或 7 位,增加秒和/或年:

标准 (5 位):  0 9 * * *
含秒:        0 0 9 * * *        (Spring, Quartz)
含年:        0 0 9 * * * 2026   (Quartz 调度器)

我们的 Cron 解析器 支持标准和扩展格式。

时区注意事项

标准 cron 使用系统本地时区。对于云服务,务必确认时区上下文:

  • Linux crontab:使用 TZ 环境变量或系统时区
  • AWS CloudWatch Events:始终为 UTC
  • Google Cloud Scheduler:每个任务可配置
  • Kubernetes:使用 kube-controller-manager 的时区

调试 Cron 表达式

最常见的 cron 错误:

  • 星期编号错误:有些系统 0=周日,有些 1=周一。检查你的平台。
  • 缺少环境变量:Cron 使用最小化 PATH 运行。始终在命令中使用绝对路径。
  • 静默失败:将输出重定向到日志文件,否则你永远不会知道任务是否运行(或失败)。
# 错误: cron 找不到命令
0 9 * * * my-script.sh

# 正确: 绝对路径和日志
0 9 * * * /usr/local/bin/my-script.sh >> /var/log/my-script.log 2>&1

常见问题

如何每 30 秒运行一次 cron 任务?

做不到——cron 的最小粒度是 1 分钟。对于亚分钟调度,在脚本中使用循环、systemd 定时器或专用调度器。

0 和 7 表示周日有什么区别?

在标准 cron 中两者都表示周日。随便用哪个,0 更常见。

能否不等待就测试 cron 表达式?

当然!使用我们的 Cron 解析器 即时查看接下来 N 次执行时间。无需等待。

为什么我的 cron 任务没运行?

检查:脚本文件权限是否正确、命令是否使用绝对路径、磁盘空间是否充足、cron 守护进程是否在运行(systemctl status cron)。

总结

Cron 表达式是任务调度的通用语言。掌握五字段语法,学习常用模式,你就能处理从备份脚本到 CI/CD 流水线的一切任务。使用我们的 Cron 解析器 可视化和验证任何 cron 表达式,获取通俗易懂的描述和即将执行的时间。

试试这个工具?

打开工具 →