定时调度专家
定时调度专家为 AI Agent 提供本地优先、无云依赖的周期任务调度能力。它把"每隔X做Y"的意图固化为可信任的执行契约,支持每日/每周/每月/自定义间隔四种调度类型,并内置时区锁定、一次性任务自动清理、并发写安全、下次运行预览与失败重试。 核心能力:周期任务捕获(add_job)、下次运行预览(next_ru...
天轰穿
@thcjp
What This Skill Does
本地优先的周期任务调度引擎,支持每日、每周、每月、自定义间隔和一次性任务五种调度类型,内置时区锁定、并发写安全、失败自动重试与熔断。任务数据全部存储在本地文件系统,无需云服务或第三方依赖。
Replaces unreliable cron scripts and cloud schedulers by providing a local-first, timezone-locked, self-cleaning task engine with failure retry and visual timeline preview.
When to Use It
- Schedule an AI agent to check email inbox every 2 hours
- Set a daily morning briefing task at 9:00 AM with timezone lock
- Create a one-time reminder that auto-archives after execution
- Pause a weekly report task temporarily without losing history
- Preview the next 24-hour task timeline to verify scheduling
- Automate a health check task with retry on failure and circuit breaker
Install
$ openclaw skills install @thcjp/cron-scheduler-pro功能说明: 本技能涵盖 scheduler 等核心能力。
定时调度专家
把"每两小时检查一次收件箱"这种模糊意图,变成可信任、可审计、可预览的执行契约。本技能解决五个核心痛点:时区漂移("9点"到底是哪个时区)、任务漏跑(调度器没跑或跑了不知道)、一次性任务堆积(提醒完了任务不清理)、并发死锁(add 后立刻 update 导致锁冲突)、失败无感知(任务挂了没人知道).
核心设计哲学
- 重复只捕获一次,然后信任:调度一旦建立,Agent 不必每次心跳都重新判断"该不该跑".
- 调度是契约:不只是提醒,而是对时间的执行承诺.
- 可见性优先:用户随时能知道"接下来跑什么、上次跑了什么".
- 本地优先:所有数据存本地,无云同步、无第三方服务.
存储结构
所有数据本地存储,按职责分文件:
$HOME/.skill-platform/workspace/memory/cron/
├── jobs.json # 任务定义(active/paused/archived)
├── runs.json # 运行历史(最近100条)
├── stats.json # 统计数据(成功率、平均耗时)
└── .lock # 文件锁(并发写保护)
无外部同步,无云存储,无第三方 cron 服务.
任务状态机
active ──pause──→ paused ──resume──→ active
│ │
└──────────archive──────────────────→ archived
| 状态 | 含义 | 是否触发 |
|---|---|---|
active | 调度生效中 | 是 |
paused | 临时暂停 | 否 |
archived | 不再活跃,保留历史 | 否 |
调度类型
| 类型 | 示例 | 说明 |
|---|---|---|
daily | 每天 09:00 | 固定每日时刻 |
weekly | 每周一 10:00 | 固定每周时刻 |
monthly | 每月1号 08:00 | 固定每月时刻 |
interval | 每 2 小时 | 固定间隔 |
once | 2026-07-18 15:30 | 一次性(成功后自动归档) |
时区锁定(核心差异化)
"每天 9 点提醒我喝水"——9 点是东京还是纽约?这是漏跑最高频的原因.
强制时区确认
首次创建任务前,必须确认时区并写入记忆:
python3 tools/cron/set_timezone.py --timezone "Asia/Shanghai"
写入 MEMORY.md:
Timezone: Asia/Shanghai (UTC+8)
创建任务时时区校验
# add_job.py 内部逻辑
def validate_timezone(job):
tz = get_stored_timezone()
if not tz:
raise SchedulerError(
"时区未锁定。请先运行 set_timezone.py 设置时区。\n"
"否则 '9点' 的含义将不确定,导致漏跑。"
)
if job.schedule_type == 'daily':
# 确认: "9点 Shanghai 时间?"
confirm = f"将按 {tz} 时区调度:每天 {job.time}。确认?"
if not user_confirm(confirm):
return None
跨时区任务
对于跨时区团队,任务可指定独立时区:
python3 tools/cron/add_job.py \
--name "daily-standup" \
--type daily \
--time "09:00" \
--timezone "Asia/Tokyo" \
--task "发起每日站会提醒"
一次性任务自清理(核心差异化)
原始方案中一次性提醒跑完后仍留在 jobs.json,时间一长堆积成垃圾。本技能强制:
# 一次性任务定义
job = {
"name": "remind-water",
"type": "once",
"at": "2026-07-18T15:30:00+08:00",
"task": "提醒喝水",
"delete_after_run": True # 强制 True,不可关闭
}
运行成功后:
- 从
active移到archived - 保留 7 天后自动物理删除
- 运行记录保留在
runs.json
# 手动清理过期归档
python3 tools/cron/cleanup.py --older-than 7d
并发写安全(核心差异化)
原始方案的 add-then-update 模式在并发时会死锁。本技能用文件锁解决:
import fcntl
# ...
def write_jobs(jobs_data):
lock_path = CRON_DIR / ".lock"
with open(lock_path, "w") as lock_file:
# 阻塞式获取排他锁
fcntl.flock(lock_file, fcntl.LOCK_EX)
try:
# 原子写入:写临时文件 → rename
tmp = CRON_DIR / "jobs.json.tmp"
tmp.write_text(json.dumps(jobs_data, indent=2))
tmp.replace(CRON_DIR / "jobs.json")
finally:
单步创建原则:所有属性在 add_job 时一次传入,禁止"先 add 再 update"两步操作.
失败重试与熔断
# 运行失败时的重试策略
RETRY_CONFIG = {
"max_retries": 3,
"backoff": [60, 300, 900], # 1分钟、5分钟、15分钟
"circuit_breaker": {
"threshold": 5, # 连续失败5次
"action": "pause", # 自动暂停任务
"notify": True # 通知用户
}
}
熔断触发后:
- 任务自动转为
paused - 记录熔断原因到
runs.json - 下次 Agent 交互时通知用户:"任务 X 因连续失败 5 次已自动暂停,请检查"
运行历史与统计
runs.json 保留最近 100 条运行记录:
{
"job_name": "inbox-check",
"started_at": "2026-07-18T10:00:00+08:00",
"finished_at": "2026-07-18T10:00:03+08:00",
"duration_ms": 3200,
"status": "success",
"retries": 0,
"error": null
}
# 查看统计
python3 tools/cron/stats.py
调度统计 (最近 7 天)
═══════════════════════════════════════
总运行: 84 次
成功: 81 次 (96.4%)
失败: 3 次
平均耗时: 4.2s
# ...
失败详情:
inbox-check 2026-07-16 14:00 网络超时 (已重试2次后成功)
daily-briefing 2026-07-15 09:00 LLM 调用失败 (已熔断暂停)
场景化指南
场景 A:Agent 心跳优化
不要在心跳里做昂贵检查,改为调度任务:
# 替代每 30 分钟心跳检查收件箱
--name "inbox-check" --type interval --every "2h" \
--task "检查收件箱并汇总"
# ...
# 心跳只做轻量的"该跑什么了"
python3 tools/cron/next_run.py --due-only
场景 B:精确一次性提醒
--name "meeting-reminder" \
--type once \
--at "2026-07-18T15:25:00+08:00" \
--task "5 分钟后开始项目评审会议,会议室 A"
# 提醒后自动归档,无需手动清理
场景 C:日报生成
--name "daily-report" \
--type daily \
--time "18:00" \
--timezone "Asia/Shanghai" \
--task "生成今日工作日报并保存到 reports/目录"
场景 D:健康检查带熔断
--name "api-health" \
--type interval \
--every "5m" \
--task "探测 API 健康端点,失败则告警" \
--max-retries 3 \
--circuit-breaker 5
支持中心
Q:任务到时间了没跑?
A:检查四点:① 任务是否 active;② 时区是否正确(next_run.py 显示的下次时间对吗);③ Agent 心跳是否在运行(本引擎依赖 Agent 唤醒);④ 是否被熔断暂停(看 stats.py).
Q:一次性任务能取消吗?
A:能。pause_job.py 或 archive_job.py 在触发前取消。若已触发但任务还在执行,无法中断.
Q:jobs.json 损坏怎么办?
A:本技能写入用临时文件+rename 原子操作,正常不会损坏。若意外损坏,runs.json 可部分重建任务历史。建议定期 cleanup.py --backup.
Q:多个 Agent 共享调度吗?
A:默认按用户隔离(每人一份 jobs.json)。共享需挂载共享目录并依赖文件锁,但心跳驱动仍是各 Agent 独立.
Q:interval 任务的起始点怎么算?
A:从创建时刻起算。如 10:00 创建"每 2 小时",则 12:00、14:00... 触发。若需对齐到整点,用 --align 参数.
Q:如何迁移到新机器?
A:复制整个 cron/ 目录即可。时区信息在 MEMORY.md,一并复制.
性能优化
- 心跳轻量化:心跳只调
next_run.py --due-only(只查到期任务),不做全量扫描. - 历史裁剪:
runs.json默认保留 100 条,超出自动裁剪最旧. - 统计延迟计算:
stats.py不实时计算,用缓存结果,每 10 次运行刷新一次. - 批量预览:
next_run.py一次计算所有任务的下次运行,避免逐个查询.
与其他技能协作
- 配合安全情报雷达:把
scan.sh注册为 interval 任务. - 配合定时守护技能:本技能管"调度",守护技能管"被调度的脚本如何写得可靠".
- 配合定时大师技能:本技能是本地引擎,大师技能是平台级 cron 的使用指南.
安装与配置
运行环境
- Agent 平台:支持 SKILL.md 的任意 AI Agent(需能运行 Python 脚本)
- 操作系统:Linux / macOS / Windows(文件锁在 Windows 上用 msvcrt 替代 fcntl)
- Python:3.8+(仅标准库,无外部包)
依赖详情
| 依赖项 | 类型 | 是否必需 | 获取方式 |
|---|---|---|---|
| Python 3 | 运行时 | 必需 | 系统自带或 python.org |
| fcntl | 标准库 | Linux/Mac 必需 | Python 自带 |
| msvcrt | 标准库 | Windows 必需 | Python 自带 |
| LLM API | API | 必需 | 由 Agent 内置 LLM 提供 |
API Key 配置
- 本技能为纯本地调度引擎,无需任何外部 API Key.
- 被调度的任务内容由 Agent 执行,任务本身可能调用其他 API(由具体任务决定).
可用性分类
- 分类:MD+EXEC(Markdown 指令 + Python 脚本执行)
- 说明:Agent 通过调用 Python 脚本管理调度,本引擎负责时区、并发、清理与统计.
- 需要Claude、GPT-4等大语言模型提供推理和自然语言理解能力
主要能力
- 定时调度专家为 AI Agent 提供本地优先、无云依赖的周期任务调度能力
- 它把"每隔X做Y"的意图固化为可信任的执行契约,支持每日/每周/每月/自定义间隔四种调度类型,并内置时区锁定、一次性任务自动清理、并发写安全、下次运行预览与失败重试
- 核心能力:周期任务捕获(add_job)、下次运行预览(next_run)、暂停/恢复/归档、运行历史与统计、一次性任务自清理、时区锁定与校验、并发文件锁、失败自动重试与熔断
- 适用场景:Agent 定期巡检、日报生成、数据同步、健康检查、个人提醒、一人公司自动化流水线
- 适用关键词:定时, 调度, 周期任务, cron, 提醒, schedule, recurring, job, timer, interval
核心功能执行
执行核心功能执行操作,使用input_params参数进行配置.
处理: 解析核心功能执行的输入参数,完成核心逻辑,返回格式化结果.
输出: 返回核心功能执行的响应数据,包含返回码、数据和处理记录.
- 调用时传入
input_params参数,支持创建/查询/导出操作
参数配置与调用
执行参数配置与调用操作,使用config_options参数进行配置.
处理: 解析参数配置与调用的输入参数,完成核心逻辑,返回格式化结果.
输出: 返回参数配置与调用的响应数据,包含返回码、数据和处理记录.
- 执行此能力时使用
config_options参数,支持修改/重置/导入操作
扩展能力3
执行扩展能力3操作,使用param_3参数进行配置.
处理: 解析扩展能力3的输入参数,完成核心逻辑,返回格式化结果.
输出: 返回扩展能力3的响应数据,包含返回码、数据和处理记录.
- 执行此能力时使用
param_3参数,支持创建/查询/修改操作 能力覆盖范围:能力范围包括以下关键词:本地优先的周期任、务引擎、并发安全、告别漏跑与堆积、Use、when、模型调用、智能对话、LLM、应用时使用、不适用于需要、确定性的关键决策等。这些关键词对应description中声明的使用场景,均已在上述能力点中提供对应的操作支持.
使用说明
...
- 确认运行环境满足依赖说明中的要求
- 根据适用场景选择合适的使用方式
- 执行操作并检查输出结果
- 如遇错误,参考错误处理章节
...
应用示例
示例1:创建带时区锁定的每日任务
用户需要每天 9 点生成工作日报,要求时区锁定防止漂移:
输入: 用户说"每天9点生成工作日报",时区 Asia/Shanghai
处理:
1. 首次创建前强制时区确认,写入 MEMORY.md
2. 创建 daily 类型任务,schedule.time = "09:00"
3. 文件锁保护原子写入 jobs.json
4. 记录到 runs.json 供后续统计
输出: 任务 "daily-report" 创建成功
类型: daily | 时间: 09:00 (Asia/Shanghai)
下次运行: 2026-07-25T09:00:00+08:00
状态: active
示例2:一次性提醒自动清理
用户需要 30 分钟后提醒关火,任务执行后自动归档:
输入: 用户说"30分钟后提醒我关火"
处理:
1. 创建 once 类型任务,at = 当前时间+30分钟
2. delete_after_run 强制 True,不可关闭
3. 到时间触发后:active → archived
4. 保留 7 天运行记录后物理删除
输出: 任务 "remind-stove" 创建成功
类型: once | 触发: 2026-07-24T16:00:00+08:00
执行后状态: archived(7天后自动物理删除)
runs.json 保留执行记录
...
功能边界
- 本地优先架构不支持多设备间任务同步,跨机器调度需借助外部协调服务(如Redis、etcd)
- 一次性任务的自清理机制在进程异常终止时可能残留,需配合系统级进程监控兜底
- 并发安全依赖文件锁实现,网络文件系统(NFS/SMB)上的锁行为不可靠,建议仅在本地文件系统使用
性能数据
| 操作场景 | 手动耗时 | 自动化耗时 | 效率提升 |
|---|---|---|---|
| 文件解析与提取 | 5-10分钟/个 | <5秒/个 | 60-120x |
| 批量文件处理(100个) | 8-16小时 | <5分钟 | 96-192x |
| API调用与响应解析 | 2-3分钟/次 | <1秒/次 | 120-180x |
| 多接口数据聚合 | 15-30分钟 | <10秒 | 90-180x |
| 命令执行与结果收集 | 3-5分钟/次 | <2秒/次 | 90-150x |
| 重复任务批量执行 | 因任务而异 | 线性缩减 | 5-50x |
| 错误排查与修复 | 10-30分钟 | <30秒 | 20-60x |
特色对比
| 对比维度 | 定时调度专家 | 传统手动方式 | 通用脚本工具 |
|---|---|---|---|
| 自动化程度 | 全流程自动 | 完全手动 | 部分自动 |
| 错误处理 | 内置错误恢复 | 依赖人工经验 | 基本try-catch |
| 可复用性 | 参数化配置 | 一次性脚本 | 模板化 |
| 安全合规 | 内置安全检查 | 无安全保障 | 无安全保障 |
| 适用场景 | "本地优先的周期任务引擎,时区锁定、一次性任务自清理、并发安全,告别漏跑与堆积. | 通用场景 | 通用场景 |
前置条件
- 已安装所需运行环境(参考依赖说明)
- 已获取必要的API密钥或访问凭证(如适用)
- 输入数据已准备就绪
异常恢复策略
针对定时调度专家使用中可能遇到的常见问题,提供以下排查方案:
| 错误类型 | 原因分析 | 解决方案 |
|---|---|---|
| API认证失败(401) | API密钥错误或过期 | 检查密钥配置,重新生成token |
| 接口限流(429) | 请求频率超出限制 | 降低调用频率,启用重试退避策略 |
| 响应超时(504) | 网络延迟或服务端负载过高 | 增加超时阈值,检查网络连接 |
| 文件不存在 | 路径错误或文件未创建 | 检查路径拼写,确认文件已生成 |
| 文件格式不支持 | 扩展名不在支持列表中 | 转换为支持的格式后重试 |
| 权限不足 | 当前用户无读写权限 | 检查文件权限,以管理员身份运行 |
| 命令执行失败 | 参数错误或环境依赖缺失 | 检查命令语法,确认依赖已安装 |
| 进程超时 | 命令执行时间过长 | 增加超时设置,优化命令参数 |
| 网络连接失败 | DNS解析失败或防火墙拦截 | 检查网络配置,确认代理设置 |
定时调度专家通用排查步骤
- 检查输入参数: 确认所有必填参数已提供且格式正确
- 查看日志输出: 定位具体错误行和异常类型
- 验证环境配置: 确认依赖库版本和运行环境满足要求
- 逐步调试: 缩小问题范围,隔离故障模块
Q1: 定时调度专家支持哪些输入格式?
A1: "本地优先的周期任务引擎,时区锁定、一次性任务自清理、并发安全,告别漏跑与堆积.。定时调度专家为 AI Agent 提供本地优先、无云依赖的周期任务调度能力。它。支持文本指令和结构化参数输入,具体格式参考使用流程章节。
Q2: 需要配置API Key吗?
A2: 是的,部分功能需要配置对应平台的API Key。请在依赖说明章节查看具体要求,并通过环境变量安全配置。
Q3: 命令行执行失败怎么办?
A3: 检查命令参数是否正确,确认运行环境支持exec能力。如遇权限问题,请参照错误处理章节排查。
Top skills in this category
Agent Browser
@matrixyHeadless browser automation CLI optimized for AI agents with accessibility tree snapshots and ref-based element selection
Auto-Updater Skill
@maximepradesAutomatically update Clawdbot and all installed skills once daily. Runs via cron, checks for updates, applies them, and messages the user with a summary of what changed.
Free Ride - Unlimited free AI
@shaivpidadiManages free AI models from OpenRouter for OpenClaw. Automatically ranks models by quality, configures fallbacks for rate-limit handling, and updates opencla...
Automation Workflows
@jk-0001Design and implement automation workflows to save time and scale operations as a solopreneur. Use when identifying repetitive tasks to automate, building workflows across tools, setting up triggers and actions, or optimizing existing automations. Covers automation opportunity identification, workflow design, tool selection (Zapier, Make, n8n), testing, and maintenance. Trigger on "automate", "automation", "workflow automation", "save time", "reduce manual work", "automate my business", "no-code automation".
Desktop Control
@matagulAdvanced desktop automation with mouse, keyboard, and screen control