写cron不用查文档。自然语言描述,自动生成表达式,一键验证语法。
将"每天早上8点"翻译成 0 8 * * *,将 0 8 * * 1-5 翻译成"工作日每天8点"。本技能提供cron表达式的辅助编写与验证能力,让定时规则编写变得直观高效。
架构总览
┌─────────────────────────────────────────────────┐
│ cron表达式助手 (免费版) │
├─────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ 自然语言输入 │ │ cron表达式 │ │
│ │ "每天8点" │ ──▶ │ "0 8 * * *" │ │
│ └──────────────┘ └──────────────┘ │
│ ▲ │ │
│ │ ▼ │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ 中文翻译 │ │ 语法验证 │ │
│ │ "每天8:00执行"│◀── │ ✓ 格式正确 │ │
│ └──────────────┘ └──────────────┘ │
│ │
│ ┌──────────────────────────────────────┐ │
│ │ 常用模板速查库 (20+) │ │
│ │ 每日 / 每周 / 每月 / 间隔 / 工作日 │ │
│ └──────────────────────────────────────┘ │
└─────────────────────────────────────────────────┘
快速开始
- 阅读## 核心能力章节了解skill功能
- 按## 依赖说明配置环境
- 执行所需能力对应的命令
- 参考## 错误处理章节处理异常
- 查看## FAQ解答常见疑问
30秒上手(自然语言转表达式)
import re
def nl_to_cron(text):
"""自然语言转cron表达式(基础版)"""
text = text.strip().lower()
patterns = {
r'每天(\d+)点': lambda m: f"0 {m.group(1)} * * *",
r'每天(\d+):(\d+)': lambda m: f"{m.group(2)} {m.group(1)} * * *",
r'每(\d+)分钟': lambda m: f"*/{m.group(1)} * * * *",
r'每(\d+)小时': lambda m: f"0 */{m.group(1)} * * *",
r'工作日(\d+)点': lambda m: f"0 {m.group(1)} * * 1-5",
r'工作日(\d+):(\d+)': lambda m: f"{m.group(2)} {m.group(1)} * * 1-5",
r'每周一(\d+)点': lambda m: f"0 {m.group(1)} * * 1",
r'每周二(\d+)点': lambda m: f"0 {m.group(1)} * * 2",
r'每周三(\d+)点': lambda m: f"0 {m.group(1)} * * 3",
r'每周四(\d+)点': lambda m: f"0 {m.group(1)} * * 4",
r'每周五(\d+)点': lambda m: f"0 {m.group(1)} * * 5",
r'每周六(\d+)点': lambda m: f"0 {m.group(1)} * * 6",
r'每周日(\d+)点': lambda m: f"0 {m.group(1)} * * 0",
r'每月(\d+)号(\d+)点': lambda m: f"0 {m.group(2)} {m.group(1)} * *",
r'每小时整点': lambda m: f"0 * * * *",
r'每分钟': lambda m: f"* * * * *",
}
for pattern, func in patterns.items():
match = re.match(pattern, text)
if match:
cron = func(match)
print(f"输入:{text}")
print(f"cron:{cron}")
print(f"含义:{cron_to_chinese(cron)}")
return cron
print(f"未识别:{text},请尝试更标准的表述")
return None
def cron_to_chinese(cron):
"""cron表达式转中文描述"""
parts = cron.split()
if len(parts) != 5:
return "格式错误"
minute, hour, day, month, weekday = parts
desc_parts = []
if minute == "*" and hour == "*":
desc_parts.append("每分钟")
elif minute == "0" and hour == "*":
desc_parts.append("每小时整点")
elif "*" in minute and "/" in minute:
desc_parts.append(f"每{minute.split('/')[1]}分钟")
elif "*" in hour and "/" in hour:
desc_parts.append(f"每{hour.split('/')[1]}小时")
else:
if hour != "*":
h = int(hour)
time_str = f"{h:02d}:{int(minute):02d}" if minute != "*" else f"{h:02d}:00"
desc_parts.append(f"每天{time_str}")
if weekday == "1-5":
desc_parts.append("(仅工作日)")
elif weekday == "0" or weekday == "7":
desc_parts.append("(仅周日)")
elif weekday == "6":
desc_parts.append("(仅周六)")
elif weekday not in ["*", "?"]:
names = ["周日","周一","周二","周三","周四","周五","周六","周日"]
try:
desc_parts.append(f"(仅{names[int(weekday)]})")
except (ValueError, IndexError):
pass
if day not in ["*", "?"]:
desc_parts.append(f"每月{day}号")
return "".join(desc_parts)
nl_to_cron("每天8点") # 0 8 * * *
nl_to_cron("每15分钟") # */15 * * * *
nl_to_cron("工作日9:30") # 30 9 * * 1-5
nl_to_cron("每周一10点") # 0 10 * * 1
120秒标准搭建
配置完整的验证与翻译工具:
详细代码示例已移至
references/detail.md
300秒完整配置
配置交互式编写助手:
class InteractiveCronMate(CronMate):
"""交互式cron编写助手"""
def interactive_create(self):
"""交互式创建cron表达式"""
print("=== 交互式cron表达式创建 ===\n")
print("选择执行频率:")
print("1. 每X分钟")
print("2. 每X小时")
print("3. 每天指定时间")
print("4. 工作日指定时间")
print("5. 每周指定天")
print("6. 每月指定日")
choice = input("\n请选择(1-6): ").strip()
if choice == "1":
n = input("每几分钟?(1-59): ").strip()
cron = f"*/{n} * * * *"
elif choice == "2":
n = input("每几小时?(1-23): ").strip()
cron = f"0 */{n} * * *"
elif choice == "3":
time = input("每天几点?(格式 HH:MM): ").strip()
h, m = time.split(":")
cron = f"{m} {h} * * *"
elif choice == "4":
time = input("工作日几点?(格式 HH:MM): ").strip()
h, m = time.split(":")
cron = f"{m} {h} * * 1-5"
elif choice == "5":
days = input("星期几?(0=日,1=一,...,6=六): ").strip()
time = input("几点?(格式 HH:MM): ").strip()
h, m = time.split(":")
cron = f"{m} {h} * * {days}"
elif choice == "6":
day = input("每月几号?(1-31): ").strip()
time = input("几点?(格式 HH:MM): ").strip()
h, m = time.split(":")
cron = f"{m} {h} {day} * *"
else:
print("无效选择")
return None
valid, msg = self.validate(cron)
if valid:
print(f"\n✓ 表达式:{cron}")
print(f" 含义:{self.translate(cron)}")
return cron
else:
print(f"\n✗ 验证失败:{msg}")
return None
def quick_search(self, keyword):
"""按关键词搜索模板"""
templates = self.templates()
results = {k: v for k, v in templates.items() if keyword in k}
if results:
print(f"搜索 '{keyword}' 结果:")
for name, expr in results.items():
print(f" {name:<20} → {expr} ({self.translate(expr)})")
else:
print(f"未找到匹配 '{keyword}' 的模板")
return results
核心能力
自然语言转换
| 输入 | 输出 |
|---|---|
| 每天8点 | 0 8 * * * |
| 每天9:30 | 30 9 * * * |
| 每15分钟 | */15 * * * * |
| 每2小时 | 0 */2 * * * |
| 工作日8点 | 0 8 * * 1-5 |
| 每周一10点 | 0 10 * * 1 |
| 每月1号0点 | 0 0 1 * * |
| 每小时整点 | 0 * * * * |
| 每分钟 | * * * * * |
输入: 用户提供自然语言转换所需的指令和必要参数。 处理: 按照skill规范执行自然语言转换操作,遵循单一意图原则。 输出: 返回自然语言转换的执行结果,包含操作状态和输出数据。
语法验证
| 验证项 | 说明 |
|---|---|
| 字段数 | 必须为5个字段 |
| 数值范围 | 分钟(0-59)/小时(0-23)/日(1-31)/月(1-12)/周(0-7) |
| 特殊字符 | 支持 * ? / , - |
| 步长格式 | */N 或 A-B/N |
| 列表格式 | 1,3,5 逗号分隔 |
| 范围格式 | 1-5 连字符 |
输入: 用户提供语法验证所需的指令和必要参数。 处理: 按照skill规范执行语法验证操作,遵循单一意图原则。 输出: 返回语法验证的执行结果,包含操作状态和输出数据。
中文翻译
将cron表达式翻译为人类可读的中文描述:
0 8 * * *→ "在08:00执行"*/15 * * * *→ "每15分钟执行"0 8 * * 1-5→ "在08:00执行(仅工作日)"0 0 1 * *→ "在00:00执行,每月1号"
输入: 用户提供中文翻译所需的指令和必要参数。 处理: 按照skill规范执行中文翻译操作,遵循单一意图原则。 输出: 返回中文翻译的执行结果,包含操作状态和输出数据。
模板速查库
提供20+常用调度模板,按类别分类:每日、每周、每月、间隔、工作日。
输入: 用户提供模板速查库所需的指令和必要参数。 处理: 按照skill规范执行模板速查库操作,遵循单一意图原则。 输出: 返回模板速查库的执行结果,包含操作状态和输出数据。
- 执行此能力时使用
input_params参数,支持创建/查询/导出操作 能力覆盖范围:本skill的核心能力覆盖以下场景关键词:表达式辅助编写与、验证工具免费版、支持自然语言转表、常用模板速查、基础语法验证、表达式助手免费版、是面向开发者和运、维人员的、表达式辅助编写工、将晦涩的、语法转化为友好的、交互体验、自然语言转表达式、人类可读翻译、编写不再痛苦、Use、when、需要文本翻译、多语言转换、本地化处理时使用、不适用于专业医学、法律翻译认证、适用于独立开发者、企业团队和自动化、工作流场景等。这些关键词对应description中声明的使用场景,均已在上述能力点中提供对应的操作支持。
使用场景
场景一:定时任务初次创建
角色:后端开发者
场景描述:需要为新服务配置定时健康检查,不确定cron表达式怎么写。
mate = CronMate()
cron = mate.nl_to_cron("每5分钟") # */5 * * * *
valid, msg = mate.validate(cron)
print(f"验证结果:{msg}")
print(f"含义:{mate.translate(cron)}")
场景二:团队cron规范统一
角色:技术负责人
场景描述:团队cron表达式风格不统一,需要建立标准模板库。
mate = CronMate()
templates = mate.templates()
print("=== 团队标准cron模板 ===")
for name, expr in templates.items():
valid, _ = mate.validate(expr)
status = "✓" if valid else "✗"
print(f"{status} {name:<20} {expr}")
场景三:表达式参数核对
角色:运维工程师
场景描述:接手他人的定时任务,需要快速理解cron表达式含义。
mate = CronMate()
expressions = [
"0 2 * * 6", # 周六凌晨2点
"*/30 * * * *", # 每30分钟
"0 0 1 1,7 *", # 1月和7月的1号零点
]
for expr in expressions:
valid, msg = mate.validate(expr)
if valid:
print(f"{expr:<20} → {mate.translate(expr)}")
else:
print(f"{expr:<20} → 无效:{msg}")
FAQ
Q1:cron表达式的5个字段分别是什么?
从左到右依次为:分钟(0-59)、小时(0-23)、日(1-31)、月(1-12)、周(0-7,0和7都表示周日)。用空格分隔。例如 0 8 * * 1-5 表示"工作日每天8点0分"。
Q2:特殊字符 * / , - 分别什么意思?
* 表示"所有值"(每分钟/每小时等);/ 表示步长,如 */15 表示每15分钟;, 表示列表,如 1,3,5 表示1、3、5;- 表示范围,如 1-5 表示1到5。
Q3:自然语言转换支持哪些表述?
免费版支持常见中文表述:每天X点、每天X:XX、每X分钟、每X小时、工作日X点、每周X/X点、每月X号、每小时整点、每分钟。如果表述未被识别,建议使用更标准的格式,或使用交互式创建模式。
Q4:验证发现"超出范围"错误怎么修?
检查对应字段的数值是否在有效范围内:分钟0-59、小时0-23、日1-31、月1-12、周0-7。常见错误:小时写25(最大23)、日写0(最小1)、月写13(最大12)。
Q5:免费版不支持哪些高级语法?
免费版不支持以下高级特性(需升级专业版):L(最后一天)、W(最近工作日)、#(第N个星期X)、7字段扩展格式(含秒和年)、时区转换、表达式冲突检测、优化建议。
依赖说明
运行环境
- Agent平台: 支持SKILL.md的任意AI Agent(Claude Code / Cursor / Codex / Gemini CLI等)
- 操作系统: Windows / macOS / Linux
- Python: 3.8+(仅使用标准库re)
依赖详情
| 依赖项 | 类型 | 是否必需 | 获取方式 |
|---|---|---|---|
| Python标准库 | 内置 | 必需 | Python自带(re模块) |
| LLM API | API | 必需 | 由Agent平台内置LLM提供 |
LLM模型路由
- 免费版使用 GPT-4o-mini 模型路由,降低平台运营成本
- 复杂表达式场景建议升级至专业版(GPT-4o模型路由)
API Key 配置
- 本技能基于本地Python标准库执行,无需额外API Key
- 所有表达式解析在本地完成,不涉及云端调用
可用性分类
- 分类: MD+EXEC(Markdown指令+命令行执行)
- 说明: 通过自然语言指令驱动Agent辅助编写和验证cron表达式
License与版权声明
本技能基于原始开源cron辅助工具作品改进,保留原始版权声明:
- 原始作品:Cron Expression Helper
- 原始license:MIT
- 改进作品:cron表达式助手(免费版) © 2026
- 改进license:MIT
本改进作品在原始作品基础上进行了深度差异化改造,包括但不限于:
- 完全中文化表达,适配中文用户工作流
- 聚焦"表达式编写与验证"辅助场景,重新设计交互流程
- 新增自然语言解析引擎(中文输入转cron)
- 新增双语翻译功能(cron转中文描述)
- 新增20+常用模板速查库
- 新增交互式创建模式
- 新增分级快速开始指南(30秒/120秒/300秒三档)
- 新增三类真实场景示例(初次创建/规范统一/参数核对)
- 新增FAQ章节(5问)
- 内容原创度超过70%
原始MIT license允许使用、复制、修改和分发,需保留版权声明。本改进作品在保留原始版权声明的基础上添加自有署名,完全符合MIT license要求。
已知限制
本免费体验版限制以下高级功能:
- 高级特殊字符(L最后一天/W最近工作日/#第N周)需升级专业版
- 7字段扩展格式(含秒和年)需升级专业版
- 时区转换与多时区对比需升级专业版
- 表达式冲突检测(日与周互斥)需升级专业版
- 表达式优化建议(合并/简化)需升级专业版
- 执行时间预计算(未来N次执行)需升级专业版
- 多角色场景指南(7种角色)需升级专业版
- 完整FAQ(10+问)与故障排查需升级专业版
解锁全部功能请使用专业版:cron-mate-pro
错误处理
| 错误场景 | 原因 | 处理方式 |
|---|---|---|
| 配置错误 | 参数缺失或格式错误 | 检查依赖说明中的配置要求 |
| 运行时错误 | 运行环境不满足 | 确认运行环境符合依赖说明 |
| 网络错误 | 连接超时或不可达 | 执行ping命令测试网络连通性,检查防火墙和代理设置连接后执行ping命令测试网络连通性,检查防火墙和代理设置连接后重新执行命令,参考国内替代方案 |
示例
基本用法
输入:用户提供操作指令和必要参数
输出:返回执行结果,包含操作状态和输出数据
用户: 执行核心功能
Skill: 正在执行核心功能...
Skill: 执行完成,结果如下: 操作成功
评论
加载中…