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