text
检测 → 修复 → 回滚 → 告警
检测:探活测试(HTTP/端口/进程/功能) 修复:重启/重试/切换 回滚:恢复到上一稳定状态 告警:记录并通知
编辑 services.json:
json
{
"services": [
{
"name": "nginx",
"check": {
"type": "port",
"target": 80
},
"fix": "systemctl restart nginx",
"rollback": "systemctl restart nginx",
"timeout": 5
},
{
"name": "web-api",
"check": {
"type": "http",
"url": "https://api.example.com/health",
"expected": "200"
},
"fix": "systemctl restart api && sleep 3",
"rollback": "cp /etc/api/backup.json /etc/api/config.json && systemctl restart api",
"backup_dir": "/etc/api/backups"
}
]
}
bash
./guard.sh services.json
bash
*/5 * * * * /path/to/guard.sh /path/to/services.json >> /var/log/guard.log 2>&1
类型配置说明port{"type": "port", "target": 8080}端口是否监听process{"type": "process", "name": "nginx"}进程是否存在http{"type": "http", "url": "...", "expected": "200"}HTTP 状态码cmd{"type": "cmd", "command": "pgrep -x myapp"}自定义命令(返回0=正常)
text
1. 解析配置文件
2. 遍历每个服务
3. 执行检测
├─ 正常 → 记录,跳过
└─ 异常 → 进入修复流程
4. 修复
├─ 执行修复命令
├─ 重新检测
│ ├─ 正常 → 恢复,记录"自愈成功"
│ └─ 仍异常 → 回滚
5. 回滚
├─ 尝试回滚
├─ 重新检测
│ ├─ 正常 → 恢复,记录"回滚成功"
│ └─ 仍异常 → 告警(需人工介入)
字段必填说明name✅服务名称(唯一标识)check✅检测配置fix✅修复命令rollback❌回滚命令(不填则跳过)timeout❌检测超时(秒),默认5backup_dir❌自动备份目录(保留最近10份)enabled❌true/false,默认true
详见 references/examples.md:
text
[2026-03-27 10:00:00] [nginx] 检测正常
[2026-03-27 10:05:00] [api] 检测失败 → 执行修复...
[2026-03-27 10:05:03] [api] 修复成功,自愈用时3秒
[2026-03-27 10:10:00] [db] 检测失败 → 执行修复... → 修复失败 → 回滚...
[2026-03-27 10:10:06] [db] 回滚成功
[2026-03-27 10:15:00] [cache] 检测失败 → 修复失败 → 回滚失败 → 告警:请人工介入