Failure Monitor - 自动故障监控修复系统
智能守护你的定时任务系统
✨ 核心功能
🔍 自动检测失败
- ✅ 监控所有 cron jobs 运行状态
- ✅ 实时检测任务失败(
lastStatus: error) - ✅ 提取错误信息和堆栈跟踪
- ✅ 统计连续失败次数
🧠 智能诊断
- ✅ 超时问题:
cron: job execution timed out - ✅ 配置错误:
Channel is required,unknown job id - ✅ 权限问题:
Permission denied,Access denied - ✅ API 错误:
API key invalid,Rate limit exceeded - ✅ 网络错误:
Network timeout,Connection refused - ✅ 脚本错误:
Script not found,Syntax error
🔧 自动修复
可自动修复的问题(无需人工确认):
- ✅ 超时问题 → 增加 timeout(120s → 300s)
- ✅ 推送配置错误 → 更新 delivery 配置
- ✅ 文件权限 → 修复执行权限(
chmod +x) - ✅ 重复任务 → 删除重复的 cron job
需要人工确认的问题:
- ⚠️ API Key 失效 → 需要更新 API Key
- ⚠️ 脚本逻辑错误 → 需要修复脚本代码
- ⚠️ 外部服务故障 → 需要等待服务恢复
- ⚠️ 重大配置变更 → 需要用户确认
📊 通知和报告
- ✅ 自动修复成功 → 推送修复报告
- ✅ 需要人工介入 → 推送确认请求(包含问题详情)
- ✅ 用户确认后 → 执行修复并推送结果
- ✅ 完整日志 → 记录所有诊断和修复操作
🚀 使用方法
1. 自动监控模式(推荐)
将 failure-monitor 设置为定时任务,定期检查所有 cron jobs:
openclaw cron add \
--name "failure-monitor" \
--cron "*/30 * * * *" \
--tz "Asia/Shanghai" \
--session isolated \
--wake now \
--deliver \
--message "运行 failure-monitor: 检查所有定时任务状态,自动修复可修复的问题,需要人工时推送确认请求。报告格式用中文。"
运行频率:
- 每 30 分钟检查一次
- 或每小时检查一次(
0 * * * *)
2. 手动触发
当收到失败通知时,手动运行诊断:
node /Users/xufan65/.openclaw/workspace/skills/failure-monitor/scripts/diagnose.cjs
3. 查看监控报告
查看最近的监控和修复记录:
cat /Users/xufan65/.openclaw/workspace/memory/failure-monitor-log.json
📋 工作流程
┌─────────────────┐
│ Cron Job 失败 │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 错误检测器 │
│ - 检查状态 │
│ - 提取错误 │
│ - 统计次数 │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 智能诊断器 │
│ - 分析错误类型 │
│ - 检查配置 │
│ - 生成方案 │
└────────┬────────┘
│
▼
能自动修复?
│
┌────┴────┐
Yes No
│ │
▼ ▼
┌───────┐ ┌──────────┐
│自动修复│ │推送确认 │
│- 执行 │ │- 详情 │
│- 记录 │ │- 等待 │
└───┬───┘ └────┬─────┘
│ │
▼ ▼
┌─────────────────┐
│ 推送报告 │
│ - 修复结果 │
│ - 需要操作 │
│ - 日志记录 │
└─────────────────┘
🔧 可自动修复的问题
| 错误类型 | 错误信息 | 修复方案 | 人工确认 |
|---|---|---|---|
| 超时 | job execution timed out | 增加 timeout(120s → 300s) | ❌ 否 |
| 推送配置 | Channel is required | 更新 delivery.channel | ❌ 否 |
| 权限 | Permission denied | chmod +x script | ❌ 否 |
| 重复任务 | 重复的 cron job | 删除重复的任务 | ❌ 否 |
| API Key | API key invalid | 需要更新 API Key | ✅ 是 |
| 脚本错误 | Script not found | 需要修复脚本 | ✅ 是 |
| 网络错误 | Network timeout | 需要检查网络 | ✅ 是 |
📊 配置文件
config/rules.json
定义自动修复规则:
{
"autoFixRules": [
{
"errorPattern": "job execution timed out",
"action": "increaseTimeout",
"params": {
"from": 120,
"to": 300
}
},
{
"errorPattern": "Channel is required",
"action": "updateDeliveryChannel",
"params": {
"channel": "discord"
}
}
],
"notifyRules": {
"autoFixSuccess": true,
"needConfirmation": true,
"cooldownMinutes": 60
}
}
🔗 Discord 推送格式
自动修复成功
# ✅ 自动修复成功
**任务**: deals-noon
**问题**: 超时(120秒)
**修复**: 增加超时到 300 秒
**时间**: 2026-03-12 14:00:00
**详情**:
- 任务运行时间超过原超时设置
- 已自动将 timeout 从 120s 增加到 300s
- 下次运行应该正常
需要人工确认
# ⚠️ 需要人工介入
**任务**: content-research
**问题**: API Key 失效
**时间**: 2026-03-12 14:00:00
**错误详情**:
Error: TAVILY_API_KEY is invalid Please update your API key
**建议操作**:
1. 检查 TAVILY_API_KEY 环境变量
2. 更新到有效的 API Key
3. 重启任务
**回复 "确认" 执行修复,或 "忽略" 跳过**
📁 文件结构
skills/failure-monitor/
├── SKILL.md # 技能说明
├── scripts/
│ ├── monitor.cjs # 主监控脚本
│ ├── diagnose.cjs # 诊断脚本
│ ├── auto-fix.cjs # 自动修复脚本
│ └── notify.cjs # 通知脚本
├── config/
│ └── rules.json # 自动修复规则
└── package.json # 依赖管理
🎯 最佳实践
1. 运行频率
- ✅ 推荐:每 30 分钟检查一次
- ✅ 可接受:每小时检查一次
- ❌ 不推荐:超过 2 小时(可能错过重要错误)
2. 通知设置
- ✅ 启用 OpenClaw 内置 Failure Alert(立即通知)
- ✅ 启用 failure-monitor(自动修复)
- ✅ 两者配合使用效果最佳
3. 人工确认
- ✅ 设置合理的冷却时间(避免重复通知)
- ✅ 明确说明需要的操作
- ✅ 提供详细的错误信息
🔐 安全考虑
- ✅ 权限限制:只修复配置问题,不修改代码
- ✅ 人工确认:重大操作需要用户确认
- ✅ 日志记录:所有操作都有完整日志
- ✅ 回滚机制:记录原始配置,支持回滚
📊 监控指标
- 总任务数: 11 个
- 失败任务: 实时统计
- 自动修复: 成功次数
- 人工介入: 需要确认的次数
- 平均恢复时间: 从失败到修复的时间
🚨 故障排除
Q: failure-monitor 自己失败了怎么办?
A: failure-monitor 使用 OpenClaw 内置的 Failure Alert,失败时会直接通知你。
Q: 如何查看修复历史?
A: 查看日志文件:
cat /Users/xufan65/.openclaw/workspace/memory/failure-monitor-log.json
Q: 如何禁用自动修复?
A: 修改 config/rules.json,将 autoFixRules 设为空数组:
{
"autoFixRules": []
}
📝 更新日志
v1.0.0 (2026-03-12)
- ✅ 初始版本
- ✅ 支持自动检测和诊断
- ✅ 支持自动修复常见问题
- ✅ 支持人工确认机制
- ✅ Discord 推送通知
🤝 贡献
欢迎提交 Issue 和 Pull Request!
GitHub: https://github.com/sunnyhot/failure-monitor
🎉 让你的定时任务系统更加健壮和可靠!