Skip to content
utility2026-07-253 分钟阅读

什么是 Cron 表达式

Cron 表达式是一种用于配置定时任务调度的字符串格式,广泛应用于 Linux crontab、CI/CD 流水线、Node.js 定时任务和分布式任务调度系统。

一个标准的 Cron 表达式由 5 个时间字段组成:

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

为什么需要 Cron 表达式解析器

  1. 定时任务配置:服务器备份、数据同步、报表生成
  2. CI/CD 调度:定时构建、定时部署
  3. 监控告警:定期健康检查
  4. 数据处理:ETL 任务、日志轮转
  5. 理解复杂表达式:可视化下一次执行时间

Cron 字段语法

特殊字符

| 字符 | 含义 | 示例 | |------|------|------| | * | 任意值 | * * * * * = 每分钟 | | , | 列表 | 1,3,5 * * * * = 第1、3、5分钟 | | - | 范围 | 1-5 * * * * = 第1到5分钟 | | / | 步长 | */15 * * * * = 每15分钟 |

常见 Cron 表达式

| 表达式 | 含义 | |--------|------| | * * * * * | 每分钟 | | 0 * * * * | 每小时整点 | | 0 0 * * * | 每天午夜 0:00 | | 0 9 * * 1-5 | 工作日上午 9:00 | | 0 0 1 * * | 每月1日午夜 | | 0 0 * * 0 | 每周日午夜 | | */5 * * * * | 每5分钟 | | 0 */2 * * * | 每2小时 | | 30 8 * * 1 | 每周一上午 8:30 | | 0 0 1,15 * * | 每月1日和15日午夜 |

如何使用在线 Cron 解析器

使用 DevToolkit Pro 的 Cron 表达式解析器

  1. 输入 Cron 表达式(如 */15 * * * *
  2. 工具解析每个字段的含义
  3. 显示人类可读的描述(如"每 15 分钟")
  4. 列出最近 5-10 次执行时间
  5. 支持语法错误检测

代码中的 Cron 使用

Node.js

const cron = require('node-cron');

// 每5分钟执行一次
cron.schedule('*/5 * * * *', () => {
  console.log('运行健康检查');
});

// 每天凌晨2点执行数据备份
cron.schedule('0 2 * * *', () => {
  console.log('执行数据备份');
});

Python

from crontab import CronTab

# 解析 Cron 表达式
cron = CronTab('* * * * *')
print(cron.description())  # "Every minute"

# 获取下一次执行时间
from datetime import datetime
next_run = cron.get_next(datetime)

Go

import "github.com/robfig/cron/v3"

c := cron.New()
// 每5分钟
c.AddFunc("*/5 * * * *", func() {
    fmt.Println("运行健康检查")
})
c.Start()

注意事项

时区问题

Cron 表达式默认使用服务器本地时区。在分布式系统中,建议统一使用 UTC:

# UTC 时间
0 2 * * *    # 每天 UTC 02:00

周日表示

不同系统中周日的表示可能不同:

  • 0 = 周日(大多数系统)
  • 7 = 周日(部分系统)
  • 1 = 周一

最小粒度

标准 Cron 的最小粒度是分钟。如果需要秒级调度,使用扩展 Cron 语法(如 */5 * * * * *,6 个字段)。

FAQ

Cron 表达式和 crontab 是什么关系?

Cron 表达式是调度规则的字符串表示。crontab 是 Linux 中配置定时任务的文件/命令。你将 Cron 表达式写入 crontab 文件来配置定时任务。

*/15 * * * *0,15,30,45 * * * * 一样吗?

效果相同,都是每 15 分钟执行。*/15 是步长语法的简写形式。

如何设置每周一到周五执行?

使用 * * * * 1-5。星期字段中 1=周一,5=周五,0 或 7=周日。


本文由 DevToolkit Pro 提供。更多开发者工具请访问 首页


ad