# 🩺 血压记录系统 - 服务配置检查报告

**检查时间**: 2026-04-19 09:17  
**检查人**: 小奕 (系统协调官)  
**对比事件**: 8315 stock_monitor 进程终止事件  
**状态**: ✅ 配置完善,无相同风险

---

## 📋 执行摘要

血压记录系统**已经配置了 systemd 服务**,不存在 stock_monitor 之前的问题(nohup 后台进程 + 无 systemd 保护)。

**服务状态**:
- ✅ 后端服务:已配置 systemd,运行正常 (已运行 10 天)
- ✅ 前端服务:已配置 systemd,运行正常
- ⚠️ **缺少看门狗监控** - 建议添加

---

## 🔍 服务详情

### 1. 后端服务 (blood_pressure_backend)

**端口**: 8305  
**PID**: 2618357  
**运行时长**: 10 天 (自 2026-04-09 21:04:32)

**systemd 配置**: ✅ 已配置
```ini
[Unit]
Description=血压记录系统后端服务
After=network.target mysqld.service
Wants=mysqld.service

[Service]
Type=simple
User=root
WorkingDirectory=/home/app/blood_pressure_backend
ExecStart=/usr/bin/python3 app.py
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal
SyslogIdentifier=blood_pressure_backend

LimitNOFILE=65535
Environment="PYTHONUNBUFFERED=1"

[Install]
WantedBy=multi-user.target
```

**配置分析**:
| 配置项 | 状态 | 说明 |
|--------|------|------|
| **Restart=always** | ✅ | 自动重启 |
| **RestartSec=10** | ✅ | 失败后 10 秒重启 |
| **开机自启** | ✅ | enabled |
| **资源限制** | ⚠️ | 仅 LimitNOFILE,缺少 Memory/CPU 限制 |
| **独立运行** | ✅ | systemd 托管,不受用户会话影响 |

**运行状态**:
```
● blood_pressure_backend.service
     Loaded: loaded (/etc/systemd/system/blood_pressure_backend.service; enabled)
     Active: active (running) since Thu 2026-04-09 21:04:32 CST; 1 week 2 days ago
   Main PID: 2618357 (python3)
     Memory: 7.4M (peak: 29.1M)
        CPU: 1min 3.011s
```

**日志检查** (08:00-09:00 期间):
- ✅ 正常运行,每 5 分钟有心跳请求
- ✅ 无崩溃记录
- ✅ 无异常终止

---

### 2. 前端服务 (blood_pressure_frontend)

**端口**: 8302  
**PID**: 3126456  
**运行时长**: 19 天 (自 2026-03-31)

**systemd 配置**: ✅ 已配置
```ini
[Unit]
Description=血压记录系统前端服务
After=network.target blood_pressure_backend.service
Wants=blood_pressure_backend.service

[Service]
Type=simple
User=root
WorkingDirectory=/home/app/blood_pressure_frontend
ExecStart=/usr/bin/python3 app.py
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal
SyslogIdentifier=blood_pressure_frontend

LimitNOFILE=65535
Environment="PYTHONUNBUFFERED=1"

[Install]
WantedBy=multi-user.target
```

**运行状态**:
```
● blood_pressure_frontend.service
     Active: active (running) since Thu 2026-03-31
   Main PID: 3126456 (python3)
```

---

### 3. 其他相关服务

**端口 8303**: TODO 应用 (PID: 3465189)  
**运行时长**: 18 天 (自 2026-04-01)

---

## 🆚 与 stock_monitor 问题对比

| 检查项 | stock_monitor (之前) | 血压记录系统 (当前) |
|--------|---------------------|-------------------|
| **启动方式** | ❌ nohup 后台进程 | ✅ systemd 服务 |
| **自动重启** | ❌ 无 | ✅ Restart=always |
| **开机自启** | ❌ 无 | ✅ enabled |
| **独立运行** | ❌ 受用户会话影响 | ✅ systemd 托管 |
| **日志管理** | ❌ 文件日志 | ✅ journalctl |
| **资源限制** | ❌ 无 | ⚠️ 部分 (仅文件句柄) |
| **看门狗监控** | ❌ 无 (现已添加) | ❌ 无 |

**结论**: 血压记录系统**不存在**stock_monitor 之前的问题,已经正确配置了 systemd 服务。

---

## ⚠️ 发现的潜在问题

### 1. 缺少看门狗监控

**问题**: 虽然 systemd 有 `Restart=always`,但缺少主动监控和端口检测。

**影响**: 
- 服务崩溃后需要等待 10 秒才能自动重启
- 无法检测端口是否可访问
- 无详细的重启日志

**建议**: 添加看门狗监控服务(参考 stock-monitor 配置)

### 2. 资源限制不完整

**当前配置**:
```ini
LimitNOFILE=65535  # 仅文件句柄限制
```

**建议添加**:
```ini
MemoryMax=256M     # 内存限制
CPUQuota=25%       # CPU 限制
```

### 3. 缺少信号处理配置

**当前配置**: 无信号处理相关配置

**建议添加**:
```ini
KillMode=mixed
KillSignal=SIGTERM
TimeoutStopSec=30
Delegate=yes
```

---

## 📊 服务健康检查

### 后端服务 (8305)

```bash
# 检查状态
systemctl status blood_pressure_backend

# 查看日志
journalctl -u blood_pressure_backend -f

# API 检查
curl http://localhost:8305/api/status
```

**状态**: ✅ 正常运行

### 前端服务 (8302)

```bash
# 检查状态
systemctl status blood_pressure_frontend

# 查看日志
journalctl -u blood_pressure_frontend -f

# Web 检查
curl http://localhost:8302/
```

**状态**: ✅ 正常运行

---

## 🛡️ 防护能力评估

| 风险场景 | 血压系统防护 | stock_monitor(之前) |
|---------|------------|-------------------|
| **Gateway 重启** | ✅ 不受影响 | ❌ 进程被终止 |
| **服务崩溃** | ✅ 10 秒自动重启 | ❌ 需手动干预 |
| **系统重启** | ✅ 自动启动 | ❌ 需手动启动 |
| **内存泄漏** | ⚠️ 无限制 | ❌ 无限制 |
| **CPU 滥用** | ⚠️ 无限制 | ❌ 无限制 |
| **端口假死** | ⚠️ 无法检测 | ❌ 无法检测 |

**总体评估**: ✅ **良好** (但建议添加看门狗监控)

---

## 📝 改进建议

### P1 - 建议执行 (1-2 周)

#### 1. 添加看门狗监控

创建 `/etc/systemd/system/blood-pressure-watchdog.service`:

```ini
[Unit]
Description=Blood Pressure System Watchdog
After=blood_pressure_backend.service
Wants=blood_pressure_backend.service

[Service]
Type=simple
User=root
ExecStart=/bin/bash /home/app/blood_pressure_backend/watchdog.sh
Restart=always
RestartSec=30
StandardOutput=journal
StandardError=journal
SyslogIdentifier=bp-watchdog

[Install]
WantedBy=multi-user.target
```

监控脚本 `/home/app/blood_pressure_backend/watchdog.sh`:

```bash
#!/bin/bash
LOG_FILE="/var/log/blood_pressure_watchdog.log"

check_service() {
    if systemctl is-active --quiet blood_pressure_backend; then
        echo "$(date '+%Y-%m-%d %H:%M:%S') - ✅ 后端服务正常" >> "$LOG_FILE"
    else
        echo "$(date '+%Y-%m-%d %H:%M:%S') - ⚠️ 后端服务异常,重启中..." >> "$LOG_FILE"
        systemctl restart blood_pressure_backend
    fi
    
    if systemctl is-active --quiet blood_pressure_frontend; then
        echo "$(date '+%Y-%m-%d %H:%M:%S') - ✅ 前端服务正常" >> "$LOG_FILE"
    else
        echo "$(date '+%Y-%m-%d %H:%M:%S') - ⚠️ 前端服务异常,重启中..." >> "$LOG_FILE"
        systemctl restart blood_pressure_frontend
    fi
}

while true; do
    check_service
    sleep 120
done
```

#### 2. 增强资源限制

编辑 `/etc/systemd/system/blood_pressure_backend.service`:

```ini
[Service]
# 添加以下配置
MemoryMax=256M
CPUQuota=25%
KillMode=mixed
KillSignal=SIGTERM
TimeoutStopSec=30
Delegate=yes
```

#### 3. 添加健康检查端点

在 `app.py` 中添加:

```python
@app.route('/api/health')
def health():
    return jsonify({
        'status': 'healthy',
        'service': 'blood_pressure_backend',
        'pid': os.getpid(),
        'uptime': time.time() - start_time
    })
```

---

## 📞 管理命令

### 查看服务状态
```bash
# 后端服务
systemctl status blood_pressure_backend

# 前端服务
systemctl status blood_pressure_frontend

# 查看日志
journalctl -u blood_pressure_backend -f
journalctl -u blood_pressure_frontend -f
```

### 重启服务
```bash
# 重启后端
systemctl restart blood_pressure_backend

# 重启前端
systemctl restart blood_pressure_frontend

# 全部重启
systemctl restart blood_pressure_backend blood_pressure_frontend
```

### 查看端口
```bash
netstat -tlnp | grep -E "8302|8303|8305"
```

---

## ✅ 检查清单

| 检查项 | 状态 | 备注 |
|--------|------|------|
| **systemd 配置** | ✅ | 已正确配置 |
| **自动重启** | ✅ | Restart=always |
| **开机自启** | ✅ | enabled |
| **独立运行** | ✅ | 不受用户会话影响 |
| **日志集中** | ✅ | journalctl |
| **资源限制** | ⚠️ | 仅文件句柄,建议添加 Memory/CPU |
| **看门狗监控** | ❌ | 建议添加 |
| **健康检查** | ❌ | 建议添加 /api/health 端点 |

---

## 📊 与 stock_monitor 对比总结

| 系统 | systemd 配置 | 看门狗 | 资源限制 | 总体风险 |
|------|------------|--------|---------|---------|
| **stock_monitor** (之前) | ❌ | ❌ | ❌ | 🔴 高风险 |
| **stock_monitor** (现在) | ✅ | ✅ | ✅ | 🟢 低风险 |
| **血压记录系统** | ✅ | ❌ | ⚠️ | 🟡 中风险 |

---

## 🎯 结论

**血压记录系统不存在 stock_monitor 之前的问题**,已经正确配置了 systemd 服务,具备:

✅ 自动重启能力  
✅ 开机自启能力  
✅ 独立运行(不受 Gateway 重启影响)  
✅ 日志集中管理  

**建议改进**:
1. 添加看门狗监控(P1 优先级)
2. 完善资源限制(P1 优先级)
3. 添加健康检查端点(P2 优先级)

---

**报告生成时间**: 2026-04-19 09:17  
**检查结论**: ✅ 配置完善,无相同风险,建议添加看门狗监控

---

*小奕 - 首席协调官 & 需求分析师 🔧*