---
summary: "心跳任务 — 定期健康检查与主动告警"
read_when:
  - 心跳轮询
---

# 心跳任务清单

## 1. 定期健康检查

**触发条件:** 每小时一次 (用户可配置频率)

**执行步骤:**

1. 执行快速系统扫描 (3秒)
2. 检查关键指标:
   - 系统负载和 CPU 使用率
   - 内存使用率和 swap 使用情况
   - 磁盘空间和 inode 使用率
   - 网络连通性 (DNS/外网)
   - 关键服务状态 (SSH/systemd/docker)
   - 最近的系统错误日志

3. 如果发现异常项,评估严重程度:
   - 🔴 高危 (磁盘满、SSH 宕机、系统负载 > CPU 核数 2 倍) → 立即推送
   - 🟡 警告 (资源使用率 > 阈值、服务异常、日志有 ERROR) → 汇总后推送
   - 🟢 正常 → 不推送,仅记录日志

4. 输出格式 (仅在有异常时推送):

```
【系统医生健康检查 YYYY-MM-DD HH:MM】

🔴 紧急问题 (需立即处理)
- 根分区磁盘使用率 96% (剩余 2.1GB)
- SSH 服务未运行,端口 22 不可达

🟡 预警信息
- 系统负载 9.5 (CPU 核心数 4)
- 内存使用率 88% (14GB / 16GB)

---
🔍 执行 "系统详细诊断" 查看完整报告
```

---

## 2. 服务可用性监测

**触发条件:** 每 15 分钟一次 (高频场景)

**执行步骤:**

1. 检查关键服务运行状态:
   - SSH 服务状态和端口监听
   - systemd 服务管理器状态
   - Docker 守护进程 (如已安装)
   - cron 定时任务服务

2. 如果发现以下情况之一,立即推送:
   - SSH 服务未运行或端口不可达
   - systemd 服务处于 failed 状态
   - Docker 守护进程异常

3. 推送格式:

```
⚠️ 服务可用性异常

症状: SSH 服务未运行,端口 22 不可达
可能原因: 服务崩溃 / 配置错误 / 防火墙拦截

🛠️ 快速排查:
1. 检查服务状态: sudo systemctl status sshd
2. 查看服务日志: sudo journalctl -u sshd -n 50
3. 检查端口监听: ss -tlnp | grep :22

需要深度诊断请回复 "诊断 SSH 服务"
```

---

## 3. 磁盘空间监控

**触发条件:** 每周一次 (周日晚上)

**执行步骤:**

1. 分析过去一周的磁盘使用情况:
   - 各分区空间占用和增长趋势
   - inode 使用率
   - 大文件和目录排查 (> 1GB)
   - 日志文件累计大小

2. 识别优化机会:
   - 旧日志是否可清理
   - 临时文件是否需要清理
   - 软件包缓存是否需要清理
   - 是否有异常大的文件占用空间

3. 提供优化建议:

```
【系统医生周报 YYYY-MM-DD】

💾 磁盘空间优化建议

根分区 (/):
- 当前使用率: 78% (198GB / 256GB)
- 本周增长: +12GB
- 建议: 清理软件包缓存,可释放约 3.5GB

日志文件:
- /var/log 累计大小: 2.8GB
- 建议: 清理 30 天前的日志,启用 logrotate

大文件排查:
- /tmp/backup.tar.gz: 5.2GB (创建于 15 天前)
- 建议: 确认是否需要,可考虑归档或删除

---
📊 本周磁盘使用统计
- 总容量: 256GB
- 已使用: 198GB (78%)
- 本周新增: +12GB
- 预计可优化: 8.7GB
```

---

## 4. 记忆维护

**触发条件:** 每周一次 (周末心跳时)

**执行步骤:**

1. 翻阅近期 `memory/YYYY-MM-DD.md` 的诊断历史
2. 提取高频问题和通用修复方案
3. 蒸馏后更新 `MEMORY.md` 的"常见问题 Playbook"章节
4. 清理超过 30 天的诊断日志 (仅保留问题类型和修复结果)

---

## 无基线时的行为

如果 `MEMORY.md` 中没有记录系统基线:
- 首次心跳时自动建立基线
- 推送时说明: "首次系统扫描已完成,已建立健康基线"
- 后续心跳将对比基线值判断异常

---

## 告警阈值 (用户可自定义)

| 指标 | 默认阈值 | 说明 |
|------|---------|------|
| CPU 使用率 | > 85% 持续 5 分钟 | 🟡 警告 |
| 系统负载 | > CPU 核数 * 1.5 | 🟡 警告, > CPU 核数 * 2 🔴 紧急 |
| 内存使用率 | > 90% | 🟡 警告, > 95% 🔴 紧急 |
| 磁盘使用率 | > 85% | 🟡 警告, > 95% 🔴 紧急 |
| inode 使用率 | > 90% | 🟡 警告 |
| 网络连通性 | DNS 解析失败 / ping 外网失败 | 🔴 紧急 |
| 服务状态 | stopped / failed / not listening | 🔴 紧急 |
| 系统日志 | > 50 条 ERROR/小时 | 🟡 警告 |

用户可通过对话修改阈值:
> "把 CPU 告警阈值改成 90%"
> "磁盘使用率超过 80% 就提醒我"
