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

9.9 KiB
Raw Permalink Blame History

PM2 进程管理使用说明

📋 简介

PM2 是一个进程管理器,可以让你的应用在后台持续运行,并支持自动重启、日志管理等功能。

🚀 快速开始

1. 安装 PM2

# 全局安装 PM2
npm install -g pm2

# 验证安装
pm2 --version

2. 启动应用

# 确保在项目根目录
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. 查看状态

# 查看所有进程状态
pm2 status

# 查看详细信息
pm2 show stock-agent

# 查看实时日志
pm2 logs stock-agent

# 查看错误日志
pm2 logs stock-agent --err

# 查看输出日志
pm2 logs stock-agent --out

4. 管理进程

# 停止应用
pm2 stop stock-agent

# 重启应用
pm2 restart stock-agent

# 删除应用
pm2 delete stock-agent

# 停止所有应用
pm2 stop all

# 重启所有应用
pm2 restart all

5. 监控

# 实时监控面板
pm2 monit

# 查看进程信息
pm2 list

📊 系统功能说明

启动 PM2 后,系统会自动运行以下功能:

核心服务

  • FastAPI Web 服务 (端口 8000)
    • API 接口服务
    • 前端页面服务
    • 模拟交易界面

后台任务

  • SmartAgent - AI 对话分析

    • 通过 API 调用触发
    • 支持多种分析技能
  • CryptoAgent - 加密货币分析

    • BTC/ETH 实时监控
    • LLM 技术分析
    • 交易信号生成
  • StockAgent - 美股分析

    • 20 只优质股票池
    • 美股交易时间内每小时分析
    • 自动发送通知
  • 价格监控 - 止盈止损检查

    • 每 3 秒检查活跃订单
    • 自动触发平仓
    • 实时通知
  • 定时报告 - 交易统计

    • 每 4 小时生成报告
    • 发送到 Telegram

🔧 配置说明

ecosystem.config.js 配置详解

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 关闭文件监控(生产环境必须关闭)

🛠️ 常用命令

开发环境

# 启动(开发模式)
pm2 start ecosystem.config.js --env development

# 查看日志
pm2 logs stock-agent

# 重启
pm2 restart stock-agent

# 停止
pm2 stop stock-agent

生产环境

# 启动(生产模式)
pm2 start ecosystem.config.js --env production

# 保存进程列表
pm2 save

# 设置开机自启
pm2 startup
# 按照提示执行命令,然后运行
pm2 save

📊 日志管理

查看日志

# 实时查看所有日志
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 文件

日志轮转

# 安装日志轮转模块
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: 进程不断重启

# 查看重启次数
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: 内存占用过高

# 查看内存使用
pm2 monit

# 查看详细信息
pm2 show stock-agent

# 如果内存超过 2G会自动重启
# 可以调整配置max_memory_restart: '3G'

问题 3: 日志不输出

# 检查 interpreter_args 配置
# 确保: interpreter_args: '-u'  # unbuffered output

# 检查环境变量
pm2 env 0  # 0 是进程 ID

# 查看实时日志
pm2 logs stock-agent --lines 0

问题 4: 端口被占用

# 查看端口占用
lsof -i :8000
# 或
netstat -tlnp | grep 8000

# 停止占用端口的进程
pm2 stop stock-agent

# 或修改 .env 中的端口
API_PORT=8001

🚀 开机自启

Linux/macOS

# 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

重启后验证

# 连接服务器后检查
pm2 list
pm2 status

# 查看日志
pm2 logs stock-agent --lines 20

📝 最佳实践

1. 开发环境

# 使用开发模式
pm2 start ecosystem.config.js --env development

# 特点:
# - DEBUG=True详细日志
# - 热重载(可选)
# - 更容易调试

2. 生产环境

# 使用生产模式
pm2 start ecosystem.config.js --env production

# 特点:
# - DEBUG=False减少日志
# - 性能优化
# - 更稳定

3. 日志管理

# 安装日志轮转
pm2 install pm2-logrotate

# 配置自动清理
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 7
pm2 set pm2-logrotate:compress true

4. 监控告警

# 安装监控模块(可选)
pm2 install pm2-server-monit

# 查看监控
pm2 monit

# 或使用系统监控工具
# - htop
# - glances
# - netdata

🎯 完整工作流程

首次部署

# 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

日常维护

# 查看状态
pm2 status

# 查看日志
pm2 logs stock-agent --lines 100

# 重启应用
pm2 restart stock-agent

# 清空日志(磁盘空间不足时)
pm2 flush

# 更新代码后
git pull
pm2 restart stock-agent

更新部署

# 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 访问

启动成功后,可以访问:

测试 API

# 测试健康检查
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"}'

📚 参考链接

⚠️ 注意事项

重要提醒

  1. 生产环境

    • 关闭 watch 选项,避免性能问题
    • 使用 --env production 启动
    • 设置合理的 max_memory_restart
  2. 日志管理

    • 定期清理或配置日志轮转
    • 避免磁盘占满
    • 监控日志文件大小
  3. 内存监控

    • 默认 2GB 自动重启
    • 可根据实际情况调整
    • 监控内存使用情况
  4. 开机自启

    • 生产环境建议设置
    • 确保 pm2 save 保存了配置
    • 重启后验证服务是否启动
  5. 环境变量

    • 确保 .env 文件配置正确
    • 检查 API 密钥是否有效
    • 生产环境使用独立的配置
  6. 端口配置

    • 默认端口 8000
    • 确保防火墙允许访问
    • 可在 .env 中修改端口

🎉 完成

配置完成后,你的系统将:

  • 在后台持续运行
  • 崩溃后自动重启
  • 支持开机自启
  • 自动管理日志
  • 实时监控状态

系统会自动运行:

  • SmartAgent - AI 对话分析
  • CryptoAgent - 加密货币分析
  • StockAgent - 美股分析20 只股票)
  • 价格监控 - 止盈止损检查
  • 定时报告 - 交易统计

祝使用愉快!🚀