stock-ai-agent/PM2_USAGE.md
2026-02-19 21:29:26 +08:00

546 lines
9.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 只股票)
- **价格监控** - 止盈止损检查
- **定时报告** - 交易统计
祝使用愉快!🚀