ClawSkills logoClawSkills

Cron Retry

在连接恢复时自动重试失败的定时任务。当定时任务因网络错误失败并需要在连接恢复时重试时使用。集成

介绍

# Cron Retry Skill

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

## 快速开始(心跳集成)

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

```markdown ## Cron Recovery Check Check for cron jobs with lastStatus: "error". If the error matches network patterns (connection error, sendMessage failed, fetch failed, ETIMEDOUT, ECONNREFUSED), retry the job using cron tool with action: "run" and the job ID. Report what was recovered. ```

就这样。每次心跳时,失败的网络任务都会自动重试。

## 工作原理

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`

## 哪些会被重试 vs 哪些会被跳过

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

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

## 手动恢复检查

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

```bash # List all jobs and their status clawdbot cron list

# Find failed jobs clawdbot cron list | jq '.jobs[] | select(.state.lastStatus == "error") | {name, error: .state.lastError}'

# Retry a specific job clawdbot cron run --id <JOB_ID> ```

## Agent 实现

在实现心跳检查时:

``` 1. Call cron tool with action: "list" 2. For each job in response.jobs: - Skip if job.enabled !== true - Skip if job.state.lastStatus !== "error" - Check if job.state.lastError matches network patterns - If retryable: call cron tool with action: "run", jobId: job.id 3. Report: "Recovered X jobs" or "No failed jobs to recover" ```

## 示例场景

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) - 报告所有恢复尝试

更多产品