# PM2 进程管理使用说明 ## 📋 简介 PM2 是一个进程管理器,可以让你的应用在后台持续运行,并支持自动重启、日志管理等功能。 ## 🚀 快速开始 ### 1. 安装 PM2 ```bash # 全局安装 PM2 npm install -g pm2 # 验证安装 pm2 --version ``` ### 2. 启动应用 ```bash # 确保在项目根目录 cd ~/app/stock-ai-agent # 开发模式启动 pm2 start ecosystem.config.js --env development # 生产模式启动 pm2 start ecosystem.config.js --env production # 或者直接使用默认配置 pm2 start ecosystem.config.js ``` ### 3. 查看状态 ```bash # 查看所有进程状态 pm2 status # 查看详细信息 pm2 show stock-agent # 查看实时日志 pm2 logs stock-agent # 查看错误日志 pm2 logs stock-agent --err # 查看输出日志 pm2 logs stock-agent --out ``` ### 4. 管理进程 ```bash # 停止应用 pm2 stop stock-agent # 重启应用 pm2 restart stock-agent # 删除应用 pm2 delete stock-agent # 停止所有应用 pm2 stop all # 重启所有应用 pm2 restart all ``` ### 5. 监控 ```bash # 实时监控面板 pm2 monit # 查看进程信息 pm2 list ``` ## 📊 系统功能说明 启动 PM2 后,系统会自动运行以下功能: ### 核心服务 - ✅ **FastAPI Web 服务** (端口 8000) - API 接口服务 - 前端页面服务 - 模拟交易界面 ### 后台任务 - ✅ **SmartAgent** - AI 对话分析 - 通过 API 调用触发 - 支持多种分析技能 - ✅ **CryptoAgent** - 加密货币分析 - BTC/ETH 实时监控 - LLM 技术分析 - 交易信号生成 - ✅ **StockAgent** - 美股分析 - 20 只优质股票池 - 美股交易时间内每小时分析 - 自动发送通知 - ✅ **价格监控** - 止盈止损检查 - 每 3 秒检查活跃订单 - 自动触发平仓 - 实时通知 - ✅ **定时报告** - 交易统计 - 每 4 小时生成报告 - 发送到 Telegram ## 🔧 配置说明 ### ecosystem.config.js 配置详解 ```javascript module.exports = { apps: [{ name: 'stock-agent', // 应用名称 script: 'backend/app/main.py', // 启动脚本 interpreter: 'python3', // Python 解释器 interpreter_args: '-u', // 无缓冲输出 cwd: process.cwd(), // 工作目录(自动获取) instances: 1, // 单实例 exec_mode: 'fork', // Fork 模式 autorestart: true, // 崩溃自动重启 watch: false, // 关闭文件监控 max_restarts: 10, // 最大重启次数 min_uptime: '10s', // 最小运行时间 max_memory_restart: '2G', // 内存超限重启(2GB) error_file: './logs/pm2-error.log', // 错误日志 out_file: './logs/pm2-out.log', // 输出日志 log_file: './logs/pm2-combined.log', // 合并日志 time: true, // 日志时间戳 kill_timeout: 8000, // 优雅关闭超时 wait_ready: true, // 等待应用就绪 }] }; ``` ### 关键配置说明 | 配置项 | 值 | 说明 | |--------|-----|------| | `instances` | 1 | 单实例(FastAPI + asyncio 不支持多实例) | | `max_memory_restart` | 2G | 内存超过 2GB 自动重启 | | `kill_timeout` | 8000 | 优雅关闭超时 8 秒 | | `watch` | false | 关闭文件监控(生产环境必须关闭) | ## 🛠️ 常用命令 ### 开发环境 ```bash # 启动(开发模式) pm2 start ecosystem.config.js --env development # 查看日志 pm2 logs stock-agent # 重启 pm2 restart stock-agent # 停止 pm2 stop stock-agent ``` ### 生产环境 ```bash # 启动(生产模式) pm2 start ecosystem.config.js --env production # 保存进程列表 pm2 save # 设置开机自启 pm2 startup # 按照提示执行命令,然后运行 pm2 save ``` ## 📊 日志管理 ### 查看日志 ```bash # 实时查看所有日志 pm2 logs # 查看最近 100 行 pm2 logs stock-agent --lines 100 # 查看错误日志 pm2 logs stock-agent --err # 清空日志 pm2 flush ``` ### 日志文件位置 ``` ./logs/pm2-error.log # 错误日志 ./logs/pm2-out.log # 输出日志 ./logs/pm2-combined.log # 合并日志 ./logs/pm2.pid # 进程 ID 文件 ``` ### 日志轮转 ```bash # 安装日志轮转模块 pm2 install pm2-logrotate # 配置日志轮转 pm2 set pm2-logrotate:max_size 10M # 单个日志文件最大 10MB pm2 set pm2-logrotate:retain 7 # 保留 7 个日志文件 pm2 set pm2-logrotate:compress true # 压缩旧日志 pm2 set pm2-logrotate:rotateInterval '0 0 * * *' # 每天午夜轮转 ``` ## 🔍 故障排除 ### 问题 1: 进程不断重启 ```bash # 查看重启次数 pm2 list # 查看错误日志 pm2 logs stock-agent --err --lines 50 # 检查配置 pm2 show stock-agent # 可能原因: # 1. 端口被占用 -> lsof -i :8000 # 2. 依赖缺失 -> 检查 requirements.txt # 3. 配置错误 -> 检查 .env 文件 # 4. 内存不足 -> 调整 max_memory_restart ``` ### 问题 2: 内存占用过高 ```bash # 查看内存使用 pm2 monit # 查看详细信息 pm2 show stock-agent # 如果内存超过 2G,会自动重启 # 可以调整配置:max_memory_restart: '3G' ``` ### 问题 3: 日志不输出 ```bash # 检查 interpreter_args 配置 # 确保: interpreter_args: '-u' # unbuffered output # 检查环境变量 pm2 env 0 # 0 是进程 ID # 查看实时日志 pm2 logs stock-agent --lines 0 ``` ### 问题 4: 端口被占用 ```bash # 查看端口占用 lsof -i :8000 # 或 netstat -tlnp | grep 8000 # 停止占用端口的进程 pm2 stop stock-agent # 或修改 .env 中的端口 API_PORT=8001 ``` ## 🚀 开机自启 ### Linux/macOS ```bash # 1. 保存当前进程列表 pm2 save # 2. 生成启动脚本 pm2 startup # 3. 按照提示执行命令(可能需要 sudo) # 示例输出: # sudo env PATH=$PATH:/usr/bin pm2 startup systemd -u ubuntu --hp /home/ubuntu # 4. 验证 pm2 list # 5. 测试重启后是否自动启动 sudo reboot ``` ### 重启后验证 ```bash # 连接服务器后检查 pm2 list pm2 status # 查看日志 pm2 logs stock-agent --lines 20 ``` ## 📝 最佳实践 ### 1. 开发环境 ```bash # 使用开发模式 pm2 start ecosystem.config.js --env development # 特点: # - DEBUG=True,详细日志 # - 热重载(可选) # - 更容易调试 ``` ### 2. 生产环境 ```bash # 使用生产模式 pm2 start ecosystem.config.js --env production # 特点: # - DEBUG=False,减少日志 # - 性能优化 # - 更稳定 ``` ### 3. 日志管理 ```bash # 安装日志轮转 pm2 install pm2-logrotate # 配置自动清理 pm2 set pm2-logrotate:max_size 10M pm2 set pm2-logrotate:retain 7 pm2 set pm2-logrotate:compress true ``` ### 4. 监控告警 ```bash # 安装监控模块(可选) pm2 install pm2-server-monit # 查看监控 pm2 monit # 或使用系统监控工具 # - htop # - glances # - netdata ``` ## 🎯 完整工作流程 ### 首次部署 ```bash # 1. 确保依赖已安装 cd backend pip install -r requirements.txt cd .. # 2. 配置 .env 文件 cp .env.example .env # 编辑 .env 文件,填入 API 密钥等配置 # 3. 创建日志目录 mkdir -p logs # 4. 测试启动(不使用 PM2) cd backend python3 -m app.main # 确认服务正常启动后 Ctrl+C 停止 # 5. 使用 PM2 启动 cd .. pm2 start ecosystem.config.js # 6. 查看状态 pm2 status # 7. 查看日志确认 pm2 logs stock-agent --lines 50 # 8. 保存进程列表 pm2 save # 9. 设置开机自启(可选) pm2 startup pm2 save ``` ### 日常维护 ```bash # 查看状态 pm2 status # 查看日志 pm2 logs stock-agent --lines 100 # 重启应用 pm2 restart stock-agent # 清空日志(磁盘空间不足时) pm2 flush # 更新代码后 git pull pm2 restart stock-agent ``` ### 更新部署 ```bash # 1. 拉取最新代码 git pull origin main # 2. 更新依赖(如有需要) cd backend pip install -r requirements.txt cd .. # 3. 重启应用 pm2 restart stock-agent # 4. 查看日志确认 pm2 logs stock-agent --lines 50 # 5. 查看状态 pm2 status ``` ## 📚 API 访问 启动成功后,可以访问: - **主页**: http://your-server:8000/ - **模拟交易**: http://your-server:8000/paper-trading - **API 文档**: http://your-server:8000/docs - **健康检查**: http://your-server:8000/health ### 测试 API ```bash # 测试健康检查 curl http://localhost:8000/health # 测试美股 API curl http://localhost:8000/api/stocks/status # 测试对话 API(需要认证) curl -X POST http://localhost:8000/api/chat/completions \ -H "Content-Type: application/json" \ -d '{"message": "分析一下 BTC"}' ``` ## 📚 参考链接 - PM2 官方文档: https://pm2.keymetrics.io/ - PM2 GitHub: https://github.com/Unitech/pm2 - FastAPI 文档: https://fastapi.tiangolo.com/ ## ⚠️ 注意事项 ### 重要提醒 1. **生产环境** - 关闭 `watch` 选项,避免性能问题 - 使用 `--env production` 启动 - 设置合理的 `max_memory_restart` 2. **日志管理** - 定期清理或配置日志轮转 - 避免磁盘占满 - 监控日志文件大小 3. **内存监控** - 默认 2GB 自动重启 - 可根据实际情况调整 - 监控内存使用情况 4. **开机自启** - 生产环境建议设置 - 确保 `pm2 save` 保存了配置 - 重启后验证服务是否启动 5. **环境变量** - 确保 `.env` 文件配置正确 - 检查 API 密钥是否有效 - 生产环境使用独立的配置 6. **端口配置** - 默认端口 8000 - 确保防火墙允许访问 - 可在 `.env` 中修改端口 ## 🎉 完成 配置完成后,你的系统将: - ✅ 在后台持续运行 - ✅ 崩溃后自动重启 - ✅ 支持开机自启 - ✅ 自动管理日志 - ✅ 实时监控状态 ### 系统会自动运行: - **SmartAgent** - AI 对话分析 - **CryptoAgent** - 加密货币分析 - **StockAgent** - 美股分析(20 只股票) - **价格监控** - 止盈止损检查 - **定时报告** - 交易统计 祝使用愉快!🚀