OA0 = Omni AI 0
OA0 是一个探索 AI 的论坛
现在注册
已注册用户请  登录
OA0  ›  技能包  ›  cron-retry:连接恢复后自动重试失败的定时任务

cron-retry:连接恢复后自动重试失败的定时任务

 
  encryption ·  2026-02-12 10:41:11 · 3 次点击  · 0 条评论  

名称: cron-retry
描述: 在连接恢复时自动重试失败的定时任务。适用于因网络错误导致定时任务失败,并应在连接恢复后重试的场景。与心跳机制集成,检测失败任务并自动重新运行。


定时任务重试技能

自动检测并重试因网络/连接错误而失败的定时任务。

快速开始(心跳集成)

将以下内容添加到你的 HEARTBEAT.md 文件中:

## 定时任务恢复检查
检查 `lastStatus` 为 "error" 的定时任务。如果错误信息匹配网络错误模式(连接错误、sendMessage 失败、fetch 失败、ETIMEDOUT、ECONNREFUSED),则使用 cron 工具,指定 `action: "run"` 和任务 ID 来重试该任务。报告已恢复的任务。

完成。每次心跳运行时,失败的网络相关任务将自动重试。

工作原理

  1. 心跳触发时,通过 cron list 检查所有定时任务。
  2. 筛选出 lastStatus = "error"enabled = true 的任务。
  3. 检查 lastError 是否匹配网络相关的错误模式。
  4. 通过 cron run 重新运行符合条件的任务。
  5. 报告结果。

网络错误模式(可重试)

以下错误表明是暂时的网络问题,值得重试:

  • Network request.*failed
  • Connection error
  • ECONNREFUSED
  • ETIMEDOUT
  • ENOTFOUND
  • sendMessage.*failed
  • fetch failed
  • socket hang up

重试与跳过规则

会重试:
- 网络超时
- 连接被拒绝
- 消息发送失败
- DNS 查找失败

会跳过(不重试):
- 逻辑错误(配置错误、数据缺失)
- 认证失败
- 已禁用的任务
- 刚刚成功运行的任务

手动恢复检查

手动检查和重试失败的任务:

# 列出所有任务及其状态
clawdbot cron list

# 查找失败的任务
clawdbot cron list | jq '.jobs[] | select(.state.lastStatus == "error") | {name, error: .state.lastError}'

# 重试特定任务
clawdbot cron run --id <任务ID>

代理实现

在实现心跳检查时:

1. 调用 cron 工具,指定 `action: "list"`
2. 对于响应中的每个任务:
   - 如果 `job.enabled !== true`,则跳过
   - 如果 `job.state.lastStatus !== "error"`,则跳过
   - 检查 `job.state.lastError` 是否匹配网络错误模式
   - 如果可重试:调用 cron 工具,指定 `action: "run"`, `jobId: job.id`
3. 报告:"已恢复 X 个任务" 或 "没有需要恢复的失败任务"

示例场景

  1. 晚上 7:00 — 晚间简报定时任务触发。
  2. 网络故障 — Telegram 发送失败。
  3. 任务被标记 lastStatus: "error", lastError: "Network request for 'sendMessage' failed!"
  4. 晚上 7:15 — 连接恢复,心跳运行。
  5. 技能检测到 失败的任务,识别其为网络错误。
  6. 重试 该任务 → 简报成功发送。
  7. 报告:"已恢复 1 个任务:evening-wrap-briefing"

安全性

  • 仅重试暂时的网络错误。
  • 尊重任务的启用状态。
  • 不会创建重试循环(检查 lastRunAtMs)。
  • 报告所有恢复尝试。
3 次点击  ∙  0 人收藏  
登录后收藏  
目前尚无回复
0 条回复
About   ·   Help   ·    
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
Developed with Cursor