TTokenySpace
返回 Skills 列表

Cron Mate Free

cron表达式辅助编写与验证工具免费版,支持自然语言转表达式、常用模板速查、基础语法验证。

#中文
0

安装到 Tokeny(自动)

下载 ZIP
安装"cron-mate-free"技能
技能信息:
- 名称: Cron Mate Free
- 标识: cron-mate-free
- 描述: cron表达式辅助编写与验证工具免费版,支持自然语言转表达式、常用模板速查、基础语法验证。
- 版本: 1.0.0
下载地址:
https://www.tokeny.space/api/skills/cron-mate-free/download
继续

复制上方内容到 Tokeny 客户端并在会话中发送即可自动安装;也可直接 下载 ZIP并拖动到技能窗口安装。

SKILL.md

写cron不用查文档。自然语言描述,自动生成表达式,一键验证语法。

将"每天早上8点"翻译成 0 8 * * *,将 0 8 * * 1-5 翻译成"工作日每天8点"。本技能提供cron表达式的辅助编写与验证能力,让定时规则编写变得直观高效。

架构总览

┌─────────────────────────────────────────────────┐
│          cron表达式助手 (免费版)                  │
├─────────────────────────────────────────────────┤
│                                                  │
│  ┌──────────────┐        ┌──────────────┐       │
│  │  自然语言输入  │       │  cron表达式   │       │
│  │ "每天8点"    │ ──▶   │ "0 8 * * *"  │       │
│  └──────────────┘        └──────────────┘       │
│         ▲                      │                │
│         │                      ▼                │
│  ┌──────────────┐        ┌──────────────┐       │
│  │  中文翻译     │       │  语法验证     │       │
│  │ "每天8:00执行"│◀──    │  ✓ 格式正确   │       │
│  └──────────────┘        └──────────────┘       │
│                                                  │
│  ┌──────────────────────────────────────┐       │
│  │         常用模板速查库 (20+)          │       │
│  │  每日 / 每周 / 每月 / 间隔 / 工作日   │       │
│  └──────────────────────────────────────┘       │
└─────────────────────────────────────────────────┘

快速开始

  1. 阅读## 核心能力章节了解skill功能
  2. 按## 依赖说明配置环境
  3. 执行所需能力对应的命令
  4. 参考## 错误处理章节处理异常
  5. 查看## 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:3030 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)
特殊字符支持 * ? / , -
步长格式*/NA-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 APIAPI必需由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: 执行完成,结果如下: 操作成功

评论

加载中…