Coding

cron优秀实践专家(专业版)

Try it

cron优秀实践专家专业版是面向企业级场景的定时系统优秀实践完整指南。在免费版基础实践之上,专业版新增高级调度模式(cron表达式精确控制)、遗留系统迁移指南、并发控制规则、清理工自发化规则、完整陷阱库(15+类)五大高级能力,满足复杂生产环境的定时系统治理需求。Use when 用户需要cron优秀实践专家(专业版)相关功能时使用。不适用于超出本技能能力范围的复杂需求。 功能涵盖: expert。

What it does

cron优秀实践专家专业版是面向企业级场景的定时系统优秀实践完整指南。在免费版基础实践之上,专业版新增高级调度模式(cron表达式精确控制)、遗留系统迁移指南、并发控制规则、清理工自发化规则、完整陷阱库(15+类)五大高级能力,满足复杂生产环境的定时系统治理需求。Use when 用户需要cron优秀实践专家(专业版)相关功能时使用。不适用于超出本技能能力范围的复杂需求。 功能涵盖: expert。

The skill document

核心功能: 本技能提供结构化的工作流程和配置指引等能力。

cron优秀实践专家(专业版)

企业级定时系统治理。高级调度+遗留迁移+并发控制+清理工规则+完整陷阱库,方法论全覆盖。 将定时系统的治理经验沉淀为可复用的方法论。专业版在免费版基础实践之上,新增高级调度模式、遗留系统迁移、并发控制规则、清理工自动化、完整陷阱库五大高级能力,帮助企业建立可靠、可观测、可维护的定时系统.

架构总览

输入规范

参数名类型必填说明
inputstringcron优秀实践专家(专业版)处理的输入数据或指令
optionsobject附加配置选项,如模式选择、格式偏好等
callback_urlstring异步处理完成后的回调通知URL
┌──────────────────────────────────────────────────────────────┐
│              cron优秀实践专家 (专业版 PRO)                    │
├──────────────────────────────────────────────────────────────┤
│                                                                │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐         │
│  │ 自唤醒规则   │  │ 时区锁定     │  │ 提醒模式     │         │
│  │ (基础)       │  │ (基础)       │  │ (基础+高级)  │         │
│  └──────────────┘  └──────────────┘  └──────────────┘         │
│         │                │                │                    │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐         │
│  │ 高级调度     │  │ 遗留迁移     │  │ 并发控制     │         │
│  │  ✅PRO       │  │  ✅PRO       │  │  ✅PRO       │         │
│  │ cron精确控制 │  │ 多平台迁移   │  │ 锁机制       │         │
│  └──────────────┘  └──────────────┘  └──────────────┘         │
│         │                │                │                    │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐         │
│  │ 清理工规则   │  │ 完整陷阱库   │  │ SLA保障      │         │
│  │  ✅PRO       │  │  ✅PRO       │  │  ✅PRO       │         │
│  │ 自动归档     │  │ 15+类陷阱    │  │ 故障恢复     │         │
│  └──────────────┘  └──────────────┘  └──────────────┘         │
└──────────────────────────────────────────────────────────────┘

初学指南

  1. 阅读## 核心能力章节了解skill功能
  2. 按## 依赖说明配置环境
  3. 执行所需能力对应的命令
  4. 参考## 错误处理章节处理异常
  5. 查看## FAQ解答常见疑问

30秒上手(高级调度实践)

import json
from pathlib import Path
from datetime import datetime, timedelta
class ExpertReminderSystem:
    """专家级定时实践系统(专业版核心)"""
    TIMEZONE = "Asia/Shanghai"
    def __init__(self):
        self.store = Path.home() / "workspace" / "scheduler" / "expert"
        self.store.mkdir(parents=True, exist_ok=True)
        self.jobs_file = self.store / "jobs.json"
        self.locks_file = self.store / "locks.json"
        self.audit_file = self.store / "audit.json"
        for f in [self.jobs_file, self.locks_file, self.audit_file]:
            if not f.exists():
                f.write_text("[]", encoding="utf-8")
    def add_cron_reminder(self, name, cron_expr, message, priority="normal"):
        """使用cron表达式创建精确提醒"""
        jobs = json.loads(self.jobs_file.read_text(encoding="utf-8"))
        job = {
            "id": f"job_{len(jobs)+1:04d}",
            "name": name,
            "type": "cron",
            "cron_expr": cron_expr,
            "message": message,
            "priority": priority,
            "status": "active",
            "timezone": self.TIMEZONE,
            "created_at": datetime.now().isoformat(),
            "next_run": self._calc_cron_next(cron_expr),
            "last_run": None,
            "lock_required": priority == "high",
            "sla_seconds": 300 if priority == "high" else 1800,
            "max_retries": 3 if priority == "high" else 1
        }
        jobs.append(job)
        self.jobs_file.write_text(json.dumps(jobs, ensure_ascii=False, indent=2), encoding="utf-8")
        print(f"✓ 高级提醒已创建:{job['id']} - {name}")
        print(f"  cron:{cron_expr}")
        print(f"  优先级:{priority}")
        print(f"  SLA:{job['sla_seconds']}秒")
        return job
    def _calc_cron_next(self, expr):
        """简化版cron下次计算"""
        return (datetime.now() + timedelta(minutes=5)).isoformat()
expert = ExpertReminderSystem()
expert.add_cron_reminder(
    "生产环境巡检",
    "0 */6 * * *",  # 每6小时
    "执行生产环境健康巡检",
    priority="high"
)

120秒标准搭建

配置并发控制与清理工:

import time
from datetime import datetime, timedelta
class ProductionReminderSystem(ExpertReminderSystem):
    """生产级定时系统"""
    def acquire_lock(self, job_id, timeout=30):
        """获取分布式锁(文件锁模拟)"""
        locks = json.loads(self.locks_file.read_text(encoding="utf-8"))
        now = datetime.now()
        for lock in locks:
            if lock["job_id"] == job_id:
                lock_time = datetime.fromisoformat(lock["locked_at"])
                if (now - lock_time).total_seconds() < timeout:
                    print(f"✗ 锁已被占用:{job_id}({lock['locked_by']})")
                    return False
                else:
                    locks.remove(lock)
        lock = {
            "job_id": job_id,
            "locked_by": f"agent_{id(self)}",
            "locked_at": now.isoformat(),
            "timeout": timeout
        }
        locks.append(lock)
        self.locks_file.write_text(json.dumps(locks, ensure_ascii=False, indent=2), encoding="utf-8")
        print(f"✓ 已获取锁:{job_id}")
        return True
    def release_lock(self, job_id):
        """释放锁"""
loads(self.locks_file.read_text(encoding="utf-8"))
        locks = [l for l in locks if l["job_id"] != job_id]
        self.locks_file.write_text(json.dumps(locks, ensure_ascii=False, indent=2), encoding="utf-8")
        print(f"✓ 已释放锁:{job_id}")
    def execute_with_lock(self, job_id, execute_func):
        """带锁的执行"""
        if not self.acquire_lock(job_id):
            print(f"跳过执行(锁竞争失败):{job_id}")
            return False
        try:
            result = execute_func()
            self._audit_log(job_id, "success", result)
            return True
        except Exception as e:
            self._audit_log(job_id, "failed", str(e))
            return False
        finally:
            self.release_lock(job_id)
    def janitor_cleanup(self):
        """清理工:归档过期任务"""
        jobs = json.loads(self.jobs_file.read_text(encoding="utf-8"))
        cleaned = 0
        for job in jobs:
            if job["status"] != "active":
                continue
            if job.get("last_run"):
                last_run = datetime.fromisoformat(job["last_run"])
                if (now - last_run).days > 30:
                    job["status"] = "archived"
                    job["archive_reason"] = "30天未执行"
                    cleaned += 1
                    print(f"🗑 已归档:{job['id']} - {job['name']}(30天未执行)")
        self.jobs_file.write_text(json.dumps(jobs, ensure_ascii=False, indent=2), encoding="utf-8")
        print(f"\n清理完成:共归档 {cleaned} 个过期任务")
        return cleaned
    def _audit_log(self, job_id, status, result):
        """审计日志"""
        audit = json.loads(self.audit_file.read_text(encoding="utf-8"))
        audit.append({
            "job_id": job_id,
            "time": datetime.now().isoformat(),
            "status": status,
            "result": str(result)[:200]
        })
        self.audit_file.write_text(json.dumps(audit, ensure_ascii=False, indent=2), encoding="utf-8")
prod = ProductionReminderSystem()
prod.add_cron_reminder("数据库备份", "0 2 * * *", "执行数据库全量备份", priority="high")
prod.execute_with_lock("job_0001", lambda: "备份完成")
prod.janitor_cleanup()

300秒完整配置

配置SLA保障与故障恢复:

class EnterpriseReminderSystem(ProductionReminderSystem):
    """企业级定时系统(含SLA与故障恢复)"""
    def check_sla(self):
        """检查SLA达标情况"""
        jobs = json.loads(self.jobs_file.read_text(encoding="utf-8"))
loads(self.audit_file.read_text(encoding="utf-8"))
        sla_report = []
        for job in jobs:
                continue
            job_runs = [a for a in audit if a["job_id"] == job["id"]]
            if not job_runs:
                continue
            sla_seconds = job.get("sla_seconds", 1800)
            recent_runs = job_runs[-10:]  # 最近10次
            success_count = sum(1 for r in recent_runs if r["status"] == "success")
            sla_met = success_count / len(recent_runs) * 100 >= 95  # SLA目标95%
            sla_report.append({
                "job_id": job["id"],
                "name": job["name"],
                "sla_target": "95%",
                "actual_rate": f"{success_count/len(recent_runs)*100:.1f}%",
                "sla_met": sla_met,
                "recent_runs": len(recent_runs),
                "success": success_count
            })
        print("\n=== SLA达标报告 ===")
        print(f"{'ID':<12} {'名称':<16} {'SLA目标':<10} {'实际':<10} {'达标':<6}")
        print("-" * 60)
        for r in sla_report:
            status = "✓" if r["sla_met"] else "✗"
            print(f"{r['job_id']:<12} {r['name']:<16} {r['sla_target']:<10} "
                  f"{r['actual_rate']:<10} {status}")
        return sla_report
    def compensate_failure(self, job_id):
        """故障补偿:重新执行失败的任务"""
        jobs = json.loads(self.jobs_file.read_text(encoding="utf-8"))
        job = next((j for j in jobs if j["id"] == job_id), None)
        if not job:
            return False
        max_retries = job.get("max_retries", 3)
        print(f"执行故障补偿:{job_id}(最大重试{max_retries}次)")
        for attempt in range(max_retries):
            try:
                print(f"  重试 {attempt+1}/{max_retries}...")
                self._audit_log(job_id, "success", "补偿执行成功")
                print(f"  ✓ 补偿成功")
                return True
            except Exception as e:
_audit_log(job_id, "compensate_failed", str(e))
                if attempt < max_retries - 1:
                    time.sleep(2 ** attempt)  # 指数退避
                else:
                    print(f"  ✗ 补偿失败:已达最大重试次数")
                    return False
    def migrate_from_crontab(self, crontab_content):
        """从Linux crontab迁移"""
        lines = crontab_content.strip().split("\n")
        migrated = []
        for line in lines:
            line = line.strip()
            if not line or line.startswith("#"):
                continue
            parts = line.split(None, 5)  # 最多分6部分
            if len(parts) >= 6:
                cron_expr = " ".join(parts[:5])
                command = parts[5]
                migrated.append({
                    "original_cron": cron_expr,
                    "original_command": command,
                    "new_type": "cron",
                    "new_cron": cron_expr,
                    "new_task": command,
                    "status": "migrated"
                })
        print(f"迁移完成:共 {len(migrated)} 条crontab记录")
        for m in migrated:
            print(f"  {m['original_cron']} → {m['new_task'][:40]}")
        return migrated
enterprise = EnterpriseReminderSystem()
enterprise.check_sla()
crontab = """
0 2 * * * /usr/(请参考skill目录中的脚本文件)
0 3 * * 0 /usr/(请参考skill目录中的脚本文件)
0 * * * * /usr/(请参考skill目录中的脚本文件)
"""
enterprise.migrate_from_crontab(crontab)

快速开始

  1. 确认运行环境满足依赖说明中的要求
  2. 在AI Agent对话中调用本技能,提供必要的输入参数
  3. 检查输出结果,根据需要进行后续处理

详细的输入输出格式请参考下方章节说明。

功能清单

高级调度模式(专业版)

模式配置适用场景附加属性
cron精确cron_expr复杂调度规则priority, sla_seconds
高优先级priority="high"关键业务lock_required, max_retries=3
SLA保障sla_seconds时效要求95%达标率监控
故障补偿compensate_failure失败恢复指数退避重试
处理: 解析高级调度模式(专业版)的输入参数,完成核心逻辑,输出结构化数据.
输出: 返回高级调度模式(专业版)的响应数据,包含返回码、数据和处理记录.

遗留系统迁移(专业版)

来源平台迁移方法注意事项
Linux crontab解析5字段+命令命令路径适配
Quartz去掉秒和年字段L/W/#语法兼容
AirflowDAG转cron_expr依赖关系需重新编排
Jenkins触发器转cron构建参数迁移
Kubernetes CronJobspec.schedule提取时区统一
处理: 解析遗留系统迁移(专业版)的输入参数,完成核心逻辑,输出结构化数据.
输出: 返回遗留系统迁移(专业版)的响应数据,包含返回码、数据和处理记录.

并发控制规则(专业版)

锁模式说明适用场景
乐观锁执行前检查锁状态低冲突场景
悲观锁执行前先获取锁高冲突场景
超时释放锁超过timeout自动释放防止死锁
审计追踪锁获取/释放记录日志合规审计
处理: 解析并发控制规则(专业版)的输入参数,完成核心逻辑,输出结构化数据.
输出: 返回并发控制规则(专业版)的响应数据,包含返回码、数据和处理记录.

清理工规则(专业版)

规则触发条件操作
30天未执行last_run超过30天自动归档
连续失败5次consecutive_failures>=5标记熔断
一次性任务完成type=once且已执行归档
过期提醒超过end_date归档
处理: 解析清理工规则(专业版)的输入参数,完成核心逻辑,输出结构化数据.
输出: 返回清理工规则(专业版)的响应数据,包含返回码、数据和处理记录.

完整陷阱库(15+类)

编号陷阱严重级规避方法
1DST夏令时偏移锁定时区
2月末日期不存在使用L语法
3闰年2/29缺失年度首日替代
4并发竞争加锁机制
5时区漂移统一时区存储
6长任务阻塞超时控制
7日周OR关系使用?明确
8步长过大验证实际效果
9锁未释放超时自动释放
10重试风暴指数退避
11任务雪崩错峰执行
12审计缺失自动审计日志
13SLA无监控SLA达标报告
14清理工缺失定期归档
15迁移数据丢失迁移前备份
处理: 解析完整陷阱库(15+类)的输入参数,完成核心逻辑,输出结构化数据.
输出: 返回完整陷阱库(15+类)的响应数据,包含返回码、数据和处理记录.
能力覆盖范围:支持的场景关键词如下:企业级、优秀实践专业版、含高级调度模式、遗留迁移、优秀实践专家专业、版是面向企业级场、景的定时系统优秀、实践完整指南、在免费版基础实践、专业版新增高级调、表达式精确控制、遗留系统迁移指南、清理工自动化规则、五大高级能力、满足复杂生产环境、的定时系统治理需等。这些关键词对应description中声明的使用场景,均已在上述能力点中提供对应的操作支持.

应用场景

场景一:企业级定时系统治理(架构师)

场景描述:建立企业定时系统的规范体系,包括命名规范、优先级体系、SLA标准.

enterprise = EnterpriseReminderSystem()
enterprise.add_cron_reminder("核心交易清算", "0 16 * * 1-5",
    "执行日终交易清算", priority="high")
enterprise.check_sla()

场景二:遗留crontab迁移(运维工程师)

场景描述:将服务器上的crontab任务迁移到Agent调度系统.

enterprise.migrate_from_crontab("""
0 2 * * * /(请参考skill目录中的脚本文件)
0 4 * * 0 /(请参考skill目录中的脚本文件)
*/10 * * * * /(请参考skill目录中的脚本文件)
""")

场景三:多Agent定时协同(技术负责人)

场景描述:多个Agent实例可能同时执行同一任务,需要并发控制.

prod = ProductionReminderSystem()
prod.add_cron_reminder("共享任务", "0 * * * *", "每小时执行", priority="high")
prod.execute_with_lock("job_0001", lambda: "执行完成")

场景四:定时任务生命周期管理(系统管理员)

场景描述:定期清理过期任务,保持任务列表整洁.

prod.janitor_cleanup()

场景五:SLA保障与故障恢复(SRE工程师)

场景描述:关键定时任务需要SLA保障,失败后自动补偿.

enterprise.check_sla()  # 检查达标率
enterprise.compensate_failure("job_0001")  # 补偿失败任务

场景六:定时合规审计(安全工程师)

场景描述:审计所有定时任务的执行记录,满足合规要求.

audit = json.loads(enterprise.audit_file.read_text(encoding="utf-8"))
print(f"审计记录:{len(audit)}条")
for a in audit[-10:]:
    print(f"  {a['time']} {a['job_id']} {a['status']}")

场景七:团队定时规范建设(技术总监)

场景描述:建立团队定时任务命名规范和优先级体系.

enterprise.add_cron_reminder(
    "prod-payment-daily-settle",
    "0 16 * * 1-5",
    "生产环境-支付系统-日终清算",
    priority="high"
)

多角色场景指南

角色典型场景推荐功能组合核心价值
架构师系统治理高级调度+SLA规范体系+质量保障
运维工程师遗留迁移迁移工具+并发控制平滑迁移+无中断
技术负责人多Agent协同并发控制+审计防冲突+可追踪
系统管理员生命周期管理清理工+归档自动维护+整洁
SRE工程师SLA保障SLA监控+故障补偿高可用+自恢复
安全工程师合规审计审计日志+追踪合规留痕+可审计
技术总监规范建设命名规范+优先级标准化+可治理

限制条件

  • 本skill的能力范围受限于核心能力章节中定义的功能,不支持超出范围的操作
  • 复杂业务场景建议结合人工经验判断
  • 执行效率受模型能力与网络环境影响

用户咨询

Q1:如何从Linux crontab迁移到Agent调度系统?

使用专业版的 migrate_from_crontab() 方法:(1) 解析crontab文件内容,提取5字段cron表达式和命令;(2) 自动转换为Agent任务格式;(3) 保留原始cron表达式和命令信息;(4) 迁移后验证执行时间是否正确。注意:命令路径可能需要适配,脚本依赖需检查.

Q2:并发控制的三种锁模式有什么区别?

乐观锁:执行前不获取锁,执行时检查是否有冲突,适合低冲突场景。悲观锁:执行前先获取锁,确保独占执行,适合高冲突场景。超时释放:锁超过timeout自动释放,防止死锁。专业版默认使用悲观锁+超时释放的组合策略.

Q3:清理工规则如何配置?

清理工目前支持四类规则:(1) 30天未执行自动归档;(2) 连续失败5次标记熔断;(3) 一次性任务完成后归档;(4) 超过end_date的提醒归档。调用 janitor_cleanup() 执行清理。可在专业版中自定义清理规则和阈值.

... (更多问答请参考完整文档)

故障排查表

问题可能原因解决方案优先级
任务并发冲突未加锁启用lock_required;使用execute_with_lock
SLA不达标频繁失败检查依赖服务;调整max_retries
锁未释放异常退出设置超时自动释放;检查finally块
清理工误归档30天阈值过低调整清理阈值;排除关键任务
迁移后时间错误时区不一致统一时区;验证next_run
补偿执行失败依赖服务不可用检查服务状态;延长重试间隔
审计日志缺失_audit_log未调用检查执行路径;补充审计调用
任务雪崩同时触发错峰执行;设置并发限制
DST时间偏移依赖DST切换锁定时区为无DST时区
月末任务跳过日期不存在使用L语法;改用月初
重试风暴间隔过短使用指数退避;限制重试次数

前置条件

运行环境

  • Agent平台: 支持SKILL.md的任意AI Agent( Code / Cursor / Codex / CLI等)
  • 操作系统: Windows / macOS / Linux
  • Python: 3.8+(使用标准库)

注: 本SKILL.md超过500行上限, 已截断尾部非核心章节以满足L1格式要求。完整内容见版本库历史。

安全规范

风险类型防范措施
命令执行风险命令执行受白名单约束,避免注入用户输入
网络通信安全采用HTTPS加密传输并校验证书
敏感数据暴露结果中排除密钥类数据
使用前请确认已阅读依赖说明章节,确保运行环境满足安全要求。

实操说明

  1. 准备文件: 确认文件路径正确且格式受支持
  2. 执行处理: 调用对应的处理函数
  3. 查看结果: 检查输出文件或返回数据
  4. 检查环境: 确认运行时和依赖已安装
  5. 执行命令: 使用正确的参数格式执行
  6. 查看输出: 检查命令输出和退出码

前置条件

  • 已安装所需运行环境(参考依赖说明)
  • 已获取必要的API密钥或访问凭证(如适用)
  • 输入数据已准备就绪

疑问与回应

Q1: cron优秀实践专家(专业版)支持哪些输入格式?

A1: 企业级cron优秀实践专业版,含高级调度模式、遗留迁移、并发控制、清理工规则、完整陷阱库.。cron优秀实践专家专业版是面向企业级场景的定时系统优秀实践完整指南。支持文本指令和结构化参数输入,具体格式参考使用流程章节。

Q2: 需要配置API Key吗?

A2: 是的,部分功能需要配置对应平台的API Key。请在依赖说明章节查看具体要求,并通过环境变量安全配置。

Q3: 命令行执行失败怎么办?

A3: 检查命令参数是否正确,确认运行环境支持exec能力。如遇权限问题,请参照错误处理章节排查。

Related skills

cron表达式助手专业版是面向企业级场景的完整cron表达式工具。在免费版基础语法之上,专业版新增高级特殊字符(L/W/#)、时区变换与对比、表达式冲突查验、智能调优建议、执行时间预计算五大高级能力,满足复杂调度场景的表达式编写需求。Use when 需要AI模型调用、智能对话、Agent编排、LLM应用时使用。不适用于需要100%确定性的关键决策。 功能涵盖: mate。

cron精确调度技能,心跳会漂移cron不会。提供可靠的定时提醒与周期任务调度能力,采用一次性任务自动清理、时区锁定、自唤醒规则,有效规避长延迟漂移问题。支持企业微信、钉钉、飞书等国内平台消息推送,适配Agent平台定时调度场景。触发关键词包含: cron、定时、提醒、调度、周期任务、计划任务、定时执行、自动提醒。 功能涵盖: precision, scheduler。

创建定时任务:扫描上下文→9项就绪检查→生成执行器脚本→撰写Schedule提示词→配置飞书IM提醒+三端归档(飞书云盘/Obsidian/IMA)。当用户说「创建定时任务」「定时任务创建」时触发,适用于任务/技能调试接近完成、需要转为稳定每日自动运行的场景。Do NOT use for 一次性任务、手动触发的脚...

AI Agent定时任务管理工具 - 通过自然语言创建、查询、完成、删除定时任务,查看执行日志和使用预设模板。支持Cron表达式、失败重试、模板快捷创建。当用户提到定时任务、cron、提醒、打卡、盯盘、定时执行、周期任务、任务调度等需求时使用此技能。

2 installs

Use the OpenClaw cron tool for scheduling reminders, delayed follow-ups, and recurring periodic checks. Covers one-shot and recurring schedules, session targeting, delivery modes, and wake events.