在线 Cron 表达式生成器:可视化创建定时任务规则
什么是 Cron 表达式生成器
Cron 表达式生成器是一个可视化工具,帮助你通过点选和填空的方式创建 Cron 定时任务表达式,而不需要手动记忆复杂的语法。打开在线 Cron 表达式生成器,逐字段选择「每 / 指定 / 范围 / 步进」,即可拼出标准五段表达式,并同步看到人类可读描述与浏览器本地时区下接下来 5 次触发。
生成器与解析器共用同一套 describeCron / getNextCronRuns:拼对五段、展开合法取值、按 Vixie 日/周 OR 列出下次触发。预览钟是浏览器本地时区,不是目标服务器的 TZ——上线前仍要在部署时钟里做一次实测或低频探测日志。
为什么需要 Cron 生成器
- 降低记忆负担:不需要记住五个字段的含义和范围
- 减少语法错误:可视化界面避免手写错误
- 即时核对:生成后立刻看到字段展开与自然语言描述
- 团队协作:统一 Cron 表达式的生成和理解
- 运维效率:快速创建服务器定时任务
- DevOps 自动化:CI/CD 流水线中的定时配置
Cron 五个字段详解
| 字段 | 取值范围 | 特殊字符 | 示例 |
|---|---|---|---|
| 分钟 | 0-59 | * , - / | */5(每5分钟) |
| 小时 | 0-23 | * , - / | 9-17(9点到17点) |
| 日期 | 1-31 | * , - / L | 1,15(1日和15日) |
| 月份 | 1-12 | * , - / | 1-6(上半年) |
| 星期 | 0-7(见下文) | * , - / | 1-5(工作日) |
说明:Linux crontab(Vixie)把周日写成
0或7。本站生成器/解析器二者都接受,并把7规范为0。解析器还接受MON-FRI、JAN等三字母别名;生成器控件输出数字五段,需要名称写法时可手改后再用解析器复核。
如何使用在线生成器
使用 ToolVault 工具匣 的 Cron 表达式生成器:
- 逐字段填写或点选:
- 分钟:每 N 分钟 / 指定分钟
- 小时:每 N 小时 / 指定小时
- 日期:每天 / 每月几号
- 月份:每月 / 指定月份
- 星期:每天 / 工作日 / 周末(取值 0–6;
7在解析侧等同周日)
- 实时生成五段 Cron 表达式
- 显示人类可读描述与接下来 5 次触发(浏览器本地时区)
- 复制后交给 crontab / CI;用 Cron 解析器 再读一遍确认语义与 OR 行为
常见定时任务模板
运维场景
| 场景 | Cron 表达式 | 说明 |
|---|---|---|
| 每分钟检查 | * * * * * | 健康检查、心跳检测 |
| 每5分钟 | */5 * * * * | 数据同步、缓存刷新 |
| 每小时 | 0 * * * * | 日志轮转、指标收集 |
| 每天凌晨2点 | 0 2 * * * | 数据备份、报表生成 |
| 每周一上午9点 | 0 9 * * 1 | 周报生成、任务分发 |
| 每月1日凌晨 | 0 0 1 * * | 月度结算、归档清理 |
开发场景
| 场景 | Cron 表达式 | 说明 |
|---|---|---|
| CI/CD 定时构建 | 0 3 * * 1-5 | 工作日凌晨3点 |
| 数据库备份 | 0 1 * * * | 每天凌晨1点 |
| 健康检查 | */5 * * * * | 每5分钟 |
| 证书过期检查 | 0 9 * * 1 | 每周一上午9点 |
Cron 扩展语法
标准 Cron 是 5 个字段(分钟级精度)。扩展 Cron 支持 6 个字段(秒级精度):
秒 分 时 日 月 周
* * * * * *
例如:*/10 * * * * * 表示每 10 秒执行。Quartz 等调度框架用 6~7 字段格式(最后的年可选),Spring 的 @Scheduled 则默认 6 字段。同一串表达式在不同系统里含义可能不同,把 Linux crontab 的表达式直接贴进 Quartz 会整体错位一位——跨系统迁移时务必先对齐字段数。
最容易踩的三个坑
1. 日和星期的关系坑
标准 Cron 里"日"和"星期"是或的关系,不是你直觉的"与":
0 0 1 * 1 # 不是"每月1号的周一",而是"每月1号"或"每个周一",次数翻倍
想表达"1号且是周一",标准 Cron 做不到,要在任务脚本里自行判断。这是 Cron 表达式设计里最著名的反直觉点。
2. 时区坑
Cron 按服务器的本地时区执行。国内开发的任务部署到 UTC 时区的云服务器上,"每天凌晨 2 点"实际是北京时间上午 10 点——反着差 8 小时。两种解法:统一给任务设 TZ=Asia/Shanghai 环境变量,或者写表达式时直接按目标时区换算。Kubernetes CronJob 可以显式声明 timeZone 字段(v1.27+)。
3. 环境变量坑
crontab 执行时的环境极其精简:没有你的 .bashrc、PATH 只有 /usr/bin:/bin。脚本里直接写 node、docker 经常"手动能跑、定时就挂"。标准做法是在 crontab 顶部设 PATH,或任务里全部使用绝对路径。
写给 Cron 任务的运维建议
- 防重叠:长任务配
*/5表达式,上一轮没跑完下一轮又启动,数据就重复了。用flock /tmp/task.lock -c '...'做互斥锁; - 日志落盘:
0 2 * * * /path/task.sh >> /var/log/task.log 2>&1,否则 Cron 的输出默认发邮件,很多机器根本没配邮件服务,错误悄无声息地消失; - 错峰:几十台机器都配
0 2 * * *会同时冲击共享的数据库/网络,按机器编号错开分钟数(0 2 * * *、5 2 * * *……); - 频繁任务改用常驻进程:秒级或每分钟级的调度用 Cron 是误用,进程启动开销和精度问题都会暴露,换 systemd timer 或常驻 worker 更合适。
方言边界(生成前先对齐)
| 目标 | 字段数 | 能否直接用本站输出 |
|---|---|---|
| Linux / macOS crontab | 5 | 可以(周日用 0 或 7,本站二者等价) |
| Kubernetes CronJob | 5 | 可以;另设 timeZone(v1.27+) |
Spring @Scheduled 默认 | 6(含秒) | 不能直接粘贴——需前置秒字段 |
| Quartz | 6–7 | 不能直接粘贴——秒/年字段会错位 |
把 Linux 五段贴进 Quartz,整串会整体右移一位,表现为「怎么都不触发」或「每秒狂跑」。迁移时先对齐字段数,再用解析器读一遍。更系统的字段与方言对照见 Cron 表达式详解;上线后的 PATH、日志、互斥见 Linux crontab 运维指南。
实际踩坑记录
- 日与周同时写死:
0 0 1 * 1不是「每月 1 号的周一」,而是两边各自命中都跑。要「且」语义只能在脚本里再判断。 - 容器默认 UTC:镜像未设
TZ时,「每天凌晨 2 点」在东八区是上午 10 点。表达式本身没错,错在时钟源。 - 周字段写 7:本站与 Vixie 一致,
7规范为周日0;若目标调度器拒绝7,生成后改成0再部署。 - 预览时区 ≠ 服务器时区:生成器的「接下来 5 次」用浏览器本地钟。目标机是 UTC 时请换算,或加
date >> /tmp/cron-smoke.log探测行。
FAQ
Cron 和 crontab 是什么关系?
Cron 是定时任务调度系统。crontab 是用户配置定时任务的文件。你通过 crontab -e 编辑 crontab 文件,写入 Cron 表达式来配置定时任务。
如何测试 Cron 表达式?
- 用生成器拼出五段,确认可读描述与下次触发符合意图
- 用 Cron 解析器 再读一遍,排除手滑与日/周 OR 误解
- 在服务器上
crontab -l核对已部署配置与时区 - 临时加一条写日志的任务,观察真实触发后再保留或删除
如何设置每天执行但在特定时间段?
使用范围语法:0 9-17 * * * 表示每小时执行一次,从上午9点到下午5点。0,30 9-17 * * * 表示每半小时执行一次。
任务没执行,怎么排查?
按顺序查三件事:服务在不在(systemctl status crond)、表达式对不对(拿生成器核对字段数,6 字段表达式在 5 字段的 crontab 里永远不执行)、日志说了什么(grep CRON /var/log/syslog 或 journalctl -u crond)。绝大多数"任务不跑"最终都归因于这三者之一。
ToolVault 工具匣 出品的开发者指南。更多免费本地工具见 首页。
实现注记
本站生成器与解析器共用 describeCron 与 getNextCronRuns:严格五字段、空白折叠、步进/范围/列表展开;周字段接受 0–7(7→0);下次触发按本地时区与日/周 OR 推算。命令行里的 %(crontab 换行分隔)属于「表达式之外」的 shell 语义,生成器不会替你转义命令体;写入 crontab 时仍需对命令中的 % 写成 \%。
相关工具
相关文章
Markdown 转 Word 交付指南:样式映射与行内降级
把 Markdown 草稿变成可交付的 .docx:pandoc 命令行与浏览器本地转换两条路线,标题/表格/代码块的 Word 原生样式映射对照,行内格式降级清单,以及「可编辑」为什么比「看起来像」更重要。
Word 转 Markdown 怎么转才干净:两条路线与格式保真对照
docx 转 Markdown 教程:pandoc 命令行与浏览器本地转换两条路线对比,标题/表格/图片/自动编号的保真行为,.doc 旧格式、图片体积、合并单元格等常见坑的解法。
中国车牌号规则与校验:普通牌、新能源与特殊格式全解
中国大陆车牌号编码规则详解:普通蓝牌、新能源 GA36D-2018、武警与使馆牌的结构、省份简称与发牌机关编码,附在线校验方法。