名称: cron-retry
描述: 在连接恢复时自动重试失败的定时任务。适用于因网络错误导致定时任务失败,并应在连接恢复后重试的场景。与心跳机制集成,检测失败任务并自动重新运行。
自动检测并重试因网络/连接错误而失败的定时任务。
将以下内容添加到你的 HEARTBEAT.md 文件中:
## 定时任务恢复检查
检查 `lastStatus` 为 "error" 的定时任务。如果错误信息匹配网络错误模式(连接错误、sendMessage 失败、fetch 失败、ETIMEDOUT、ECONNREFUSED),则使用 cron 工具,指定 `action: "run"` 和任务 ID 来重试该任务。报告已恢复的任务。
完成。每次心跳运行时,失败的网络相关任务将自动重试。
cron list 检查所有定时任务。lastStatus = "error" 且 enabled = true 的任务。lastError 是否匹配网络相关的错误模式。cron run 重新运行符合条件的任务。以下错误表明是暂时的网络问题,值得重试:
Network request.*failedConnection errorECONNREFUSEDETIMEDOUTENOTFOUNDsendMessage.*failedfetch failedsocket 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 个任务" 或 "没有需要恢复的失败任务"
lastStatus: "error", lastError: "Network request for 'sendMessage' failed!"。lastRunAtMs)。