在线 Cron 表达式解析器:可视化理解定时任务调度
什么是 Cron 表达式
Cron 表达式是一种用于配置定时任务调度的字符串格式,广泛应用于 Linux crontab、CI/CD 流水线、Node.js 定时任务和分布式任务调度系统。把表达式粘贴到 Cron 表达式解析器 里,立刻能看到每个字段展开后的合法取值、一段人类可读描述,以及浏览器本地时区下接下来 5 次触发——适合回答「这串到底在说什么」和「按本地钟它大概几点响」。
下次触发按 Vixie 日/周 OR 语义推算,并显式标注「浏览器本地时区」。它不是目标服务器日历:云主机常为 UTC,容器未设 TZ 时也常是 UTC——预览结果要换算到部署时钟,或在机器上跑低频探测日志。需要从需求反向拼表达式时,用 Cron 生成器。
一个标准的 Cron 表达式由 5 个时间字段组成:
┌───────────── 分钟 (0-59)
│ ┌───────────── 小时 (0-23)
│ │ ┌───────────── 日期 (1-31)
│ │ │ ┌───────────── 月份 (1-12 或 JAN-DEC)
│ │ │ │ ┌───────────── 星期 (0-7 或 SUN-SAT;0 与 7 均为周日)
│ │ │ │ │
* * * * *
为什么需要 Cron 表达式解析器
- 定时任务配置:服务器备份、数据同步、报表生成
- CI/CD 调度:定时构建、定时部署
- 监控告警:定期健康检查
- 数据处理:ETL 任务、日志轮转
- 理解复杂表达式:可视化下一次执行时间
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 解析器
使用 ToolVault 工具匣 的 Cron 表达式解析器:
- 输入五段 Cron 表达式(如
*/15 * * * *,或0 9 * * MON-FRI) - 工具展开每个字段的合法取值列表(名称别名会先换成数字)
- 显示人类可读描述(英文摘要拼装,便于核对)
- 列出接下来 5 次触发(浏览器本地时区;日/周双受限时走 OR)
- 字段数不是 5、取值真正越界(如周字段
8)时给出明确错误;周字段7会规范为周日0 - 从内置示例起步,改数字或别名观察展开与下次触发变化
代码中的 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=周日 …6=周六;接受7并规范为0(与 Vixie 一致) - 月份/星期支持三字母英文名:
JAN–DEC、SUN–SAT(大小写不敏感) - 多数文档:
1=周一(与 ISO 习惯一致,但务必以目标实现为准)
最小粒度
标准 Cron 的最小粒度是分钟。如果需要秒级调度,使用扩展 Cron 语法(如 */5 * * * * *,6 个字段)。六段表达式在本站会报 INVALID_CRON_FORMAT——请先确认目标调度器方言,不要假设「多一段无所谓」。
五字段与各方言的扩展
经典 cron 五字段(分 时 日 月 周)有一条反直觉规则——日和周都受限时它们是「或」不是「与」(「每月 1 号且周一」要在脚本里再判断,不是一条表达式搞定)。下次触发表按同一 OR 规则列点,便于当场识破误解。现代扩展:秒字段(Quartz / Spring 前置)、@daily/@hourly 宏、k8s CronJob(只五字段——把带秒的 Quartz 贴进去会迷惑地失败)。本站 解析器 与 生成器 都绑定经典五字段,跨方言粘贴前先数段数。
时区:字段展开与下次触发是两层
字段展开不依赖浏览器时区——它只把 */15、MON-FRI 变成取值集合。下次 5 次触发则用浏览器本地时钟推算,并标明「浏览器本地时区」。真正决定生产「几点响」的是 daemon / 容器 / CronJob 的时钟:系统 cron 用服务器本地时区;Docker 常默认 UTC;k8s 可显式 timeZone;Quartz 跟 JVM 默认。DST 再加一刀:春令时消失的小时永不执行、秋令时可能跑两遍。纪律:避开模糊的 2–3 点档;预览对齐服务器时区后再上线。
五个让 cron 静默死掉的错误
脚本里的相对路径(cron 的工作目录不是你的——显式 cd);缺失环境(最小 PATH——source profile 或绝对路径);无输出处理(邮件进没人读的 root 信箱——重定向到有轮转的日志);无锁(上一轮超时叠加——flock);无监控(死了三周没人知道——心跳/死信)。运维清单见 Linux crontab 运维指南。
实现注记
describeCron 对输入做空白折叠后要求恰好五段;每段走 * / */n / a-b / a-b/n / a,b,并先把月/周英文名换成数字;周字段允许 7 再规范为 0。getNextCronRuns 在本地时区上按月长迭代候选时刻,日/周双受限时用 OR。返回的 description 仍是英文短语拼装——不是本地化自然语言引擎。
FAQ
Cron 表达式和 crontab 是什么关系?
Cron 表达式是调度规则的字符串表示。crontab 是 Linux 中配置定时任务的文件/命令。你将 Cron 表达式写入 crontab 文件来配置定时任务。
*/15 * * * * 和 0,15,30,45 * * * * 一样吗?
效果相同,都是每 15 分钟执行。*/15 是步长语法的简写形式。
如何设置每周一到周五执行?
使用 0 9 * * 1-5 或 0 9 * * MON-FRI(示例:工作日上午 9 点)。星期字段中 1=周一,5=周五,周日用 0 或 7(本站二者等价)。
「下次执行时间」用的是哪个时区?
解析器预览用浏览器本地时区。若目标机是 UTC,请自行换算,或在服务器上加一条带 date >> /tmp/cron-smoke.log 的低频探测任务做最终确认。
本文出自 ToolVault 工具匣。首页 汇集了更多浏览器本地工具。
相关工具
相关文章
Markdown 转 Word 交付指南:样式映射与行内降级
把 Markdown 草稿变成可交付的 .docx:pandoc 命令行与浏览器本地转换两条路线,标题/表格/代码块的 Word 原生样式映射对照,行内格式降级清单,以及「可编辑」为什么比「看起来像」更重要。
Word 转 Markdown 怎么转才干净:两条路线与格式保真对照
docx 转 Markdown 教程:pandoc 命令行与浏览器本地转换两条路线对比,标题/表格/图片/自动编号的保真行为,.doc 旧格式、图片体积、合并单元格等常见坑的解法。
中国车牌号规则与校验:普通牌、新能源与特殊格式全解
中国大陆车牌号编码规则详解:普通蓝牌、新能源 GA36D-2018、武警与使馆牌的结构、省份简称与发牌机关编码,附在线校验方法。