# 后端服务守护进程配置指南 **配置时间**: 2026-03-14 **版本**: v2.7.4 --- ## 🔍 后端不稳定原因分析 ### 可能原因 1. **手动启动无守护** - 之前使用 `nohup` 但没有监控 2. **服务器重启** - 服务器重启后需要手动启动 3. **内存不足** - 检查发现内存充足 (3.5GB 可用 1.5GB) 4. **磁盘空间** - 检查发现磁盘充足 (49GB 可用 31GB) 5. **进程意外终止** - 可能因系统资源调度被 kill ### 日志分析 检查 `/tmp/zodiac-backend.log` 发现: - ✅ 没有 Python 异常 - ✅ 没有内存溢出 - ✅ 没有数据库连接错误 - ✅ 服务正常运行直到意外停止 **结论**: 进程缺少守护机制,意外停止后无法自动恢复 --- ## ✅ 解决方案:双重守护 ### 方案 1: 启动脚本 + Crontab 监控(已配置) **启动脚本**: `/home/admin/.openclaw/workspace/zodiac-collector/backend-fastapi/start.sh` **功能**: - ✅ 检查进程是否已在运行 - ✅ 停止旧进程 - ✅ 启动新进程 - ✅ 保存 PID 到文件 - ✅ 验证启动是否成功 **Crontab 监控**: 每 2 分钟检查一次 ```bash */2 * * * * if ! ps aux | grep -v grep | grep 'uvicorn app.main:app' > /dev/null; then /home/admin/.openclaw/workspace/zodiac-collector/backend-fastapi/start.sh >> /tmp/backend-watch.log 2>&1; fi ``` **优点**: - 简单可靠 - 自动恢复 - 日志记录 --- ### 方案 2: systemd 服务(备选) 如果 crontab 方案不可靠,可以使用 systemd: **服务文件**: `/etc/systemd/system/zodiac-backend.service` ```ini [Unit] Description=甲辰藏品管理系统 FastAPI 后端服务 After=network.target [Service] Type=simple User=admin WorkingDirectory=/home/admin/.openclaw/workspace/zodiac-collector/backend-fastapi ExecStart=/usr/local/python3.12/bin/python3.12 -m uvicorn app.main:app --port 3000 --host 0.0.0.0 Restart=always RestartSec=3 [Install] WantedBy=multi-user.target ``` **启用命令**: ```bash sudo systemctl daemon-reload sudo systemctl enable zodiac-backend sudo systemctl start zodiac-backend ``` --- ## 📋 使用指南 ### 启动服务 ```bash # 方法 1: 使用启动脚本 /home/admin/.openclaw/workspace/zodiac-collector/backend-fastapi/start.sh # 方法 2: 手动启动 cd /home/admin/.openclaw/workspace/zodiac-collector/backend-fastapi nohup /usr/local/python3.12/bin/python3.12 -m uvicorn app.main:app --port 3000 --host 0.0.0.0 > /tmp/zodiac-backend.log 2>&1 & ``` ### 停止服务 ```bash # 方法 1: 使用 PID 文件 kill $(cat /tmp/zodiac-backend.pid) # 方法 2: 杀死进程 pkill -f "uvicorn app.main:app" ``` ### 查看状态 ```bash # 查看进程 ps aux | grep uvicorn # 查看日志 tail -f /tmp/zodiac-backend.log # 查看监控日志 tail -f /tmp/backend-watch.log ``` ### 重启服务 ```bash pkill -f "uvicorn app.main:app" sleep 2 /home/admin/.openclaw/workspace/zodiac-collector/backend-fastapi/start.sh ``` --- ## 🔧 故障排查 ### 问题 1: 服务无法启动 **检查端口占用**: ```bash netstat -tlnp | grep 3000 # 如果占用,杀死进程 kill -9 $(lsof -t -i:3000) ``` **检查 Python 路径**: ```bash which python3.12 # 应该是:/usr/local/python3.12/bin/python3.12 ``` **检查依赖**: ```bash cd /home/admin/.openclaw/workspace/zodiac-collector/backend-fastapi pip3 list | grep -i "fastapi\|uvicorn\|sqlalchemy" ``` ### 问题 2: 服务频繁重启 **查看监控日志**: ```bash tail -100 /tmp/backend-watch.log ``` **查看系统日志**: ```bash dmesg | grep -i "killed\|oom" ``` **检查资源使用**: ```bash free -h df -h top -bn1 | head -20 ``` ### 问题 3: Crontab 不执行 **检查 crontab 配置**: ```bash crontab -l ``` **检查 cron 服务**: ```bash systemctl status crond ``` **查看 cron 日志**: ```bash tail -f /var/log/cron ``` --- ## 📊 监控指标 ### 进程状态 ```bash # 进程是否在运行 ps aux | grep uvicorn | grep -v grep | wc -l # 应该返回:1 ``` ### 服务响应 ```bash # 测试 API 响应 curl -s http://localhost:3000/api/auth/login -X POST \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "username=admin&password=admin123" | python3 -c "import sys,json; d=json.load(sys.stdin); print('正常' if 'access_token' in d else '异常')" ``` ### 日志大小 ```bash # 检查日志文件大小 ls -lh /tmp/zodiac-backend.log # 如果>100MB,考虑轮转 ``` --- ## 🎯 最佳实践 ### 1. 定期重启 建议每周重启一次服务,释放内存: ```bash # 添加到 crontab 0 3 * * 0 pkill -f "uvicorn app.main:app" && sleep 2 && /home/admin/.openclaw/workspace/zodiac-collector/backend-fastapi/start.sh ``` ### 2. 日志轮转 创建 `/etc/logrotate.d/zodiac-backend`: ``` /tmp/zodiac-backend.log { daily rotate 7 compress delaycompress missingok notifempty create 0644 admin admin } ``` ### 3. 监控告警 可以添加简单的告警脚本: ```bash #!/bin/bash if ! curl -s http://localhost:3000/health > /dev/null; then echo "后端服务异常!" | mail -s "告警:后端服务宕机" admin@example.com fi ``` --- ## 📝 配置文件清单 | 文件 | 路径 | 说明 | |------|------|------| | **启动脚本** | `backend-fastapi/start.sh` | 服务启动脚本 | | **PID 文件** | `/tmp/zodiac-backend.pid` | 进程 ID | | **日志文件** | `/tmp/zodiac-backend.log` | 运行日志 | | **监控日志** | `/tmp/backend-watch.log` | 监控日志 | | **Crontab** | `crontab -l` | 定时任务 | --- ## ✅ 验证清单 - [x] 启动脚本已创建 - [x] 脚本权限已设置 (chmod +x) - [x] Crontab 监控已配置 - [x] 服务正在运行 - [x] API 响应正常 - [ ] systemd 服务(备选) - [ ] 日志轮转配置 - [ ] 监控告警配置 --- **配置完成!后端服务现在具有自动恢复能力!** 🎉