update
This commit is contained in:
parent
b61b9a0f0b
commit
a771bbad31
365
PM2_USAGE.md
Normal file
365
PM2_USAGE.md
Normal file
@ -0,0 +1,365 @@
|
|||||||
|
# PM2 进程管理使用说明
|
||||||
|
|
||||||
|
## 📋 简介
|
||||||
|
|
||||||
|
PM2 是一个进程管理器,可以让你的应用在后台持续运行,并支持自动重启、日志管理等功能。
|
||||||
|
|
||||||
|
## 🚀 快速开始
|
||||||
|
|
||||||
|
### 1. 安装 PM2
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 全局安装 PM2
|
||||||
|
npm install -g pm2
|
||||||
|
|
||||||
|
# 验证安装
|
||||||
|
pm2 --version
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. 启动应用
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 开发模式启动
|
||||||
|
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
|
||||||
|
```
|
||||||
|
|
||||||
|
### 6. 日志管理
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 清空所有日志
|
||||||
|
pm2 flush
|
||||||
|
|
||||||
|
# 查看日志文件位置
|
||||||
|
pm2 show stock-agent | grep log
|
||||||
|
|
||||||
|
# 日志轮转(安装模块)
|
||||||
|
pm2 install pm2-logrotate
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🔧 配置说明
|
||||||
|
|
||||||
|
### ecosystem.config.js 配置文件
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
module.exports = {
|
||||||
|
apps: [{
|
||||||
|
name: 'stock-agent', // 应用名称
|
||||||
|
script: 'backend/app/main.py', // 启动脚本
|
||||||
|
interpreter: 'python3', // 解释器
|
||||||
|
cwd: './', // 工作目录
|
||||||
|
instances: 1, // 实例数量
|
||||||
|
autorestart: true, // 自动重启
|
||||||
|
watch: false, // 文件监控(生产环境建议关闭)
|
||||||
|
max_memory_restart: '1G', // 内存超限重启
|
||||||
|
error_file: './logs/pm2-error.log', // 错误日志
|
||||||
|
out_file: './logs/pm2-out.log', // 输出日志
|
||||||
|
log_file: './logs/pm2-combined.log',// 合并日志
|
||||||
|
time: true, // 日志时间戳
|
||||||
|
kill_timeout: 5000, // 停止超时
|
||||||
|
min_uptime: '10s', // 最小运行时间
|
||||||
|
max_restarts: 10, // 最大重启次数
|
||||||
|
}]
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🛠️ 常用命令
|
||||||
|
|
||||||
|
### 开发环境
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 启动(开发模式)
|
||||||
|
pm2 start ecosystem.config.js --env development
|
||||||
|
|
||||||
|
# 查看日志
|
||||||
|
pm2 logs stock-agent
|
||||||
|
|
||||||
|
# 重启
|
||||||
|
pm2 restart 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 # 合并日志
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🔍 故障排除
|
||||||
|
|
||||||
|
### 问题 1: 进程不断重启
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 查看重启次数
|
||||||
|
pm2 list
|
||||||
|
|
||||||
|
# 查看错误日志
|
||||||
|
pm2 logs stock-agent --err
|
||||||
|
|
||||||
|
# 检查配置
|
||||||
|
pm2 show stock-agent
|
||||||
|
```
|
||||||
|
|
||||||
|
### 问题 2: 内存占用过高
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 查看内存使用
|
||||||
|
pm2 monit
|
||||||
|
|
||||||
|
# 如果内存超过 max_memory_restart,会自动重启
|
||||||
|
```
|
||||||
|
|
||||||
|
### 问题 3: 端口被占用
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 查看端口占用
|
||||||
|
lsof -i :8000
|
||||||
|
|
||||||
|
# 停止应用
|
||||||
|
pm2 stop stock-agent
|
||||||
|
|
||||||
|
# 修改 .env 中的端口后重启
|
||||||
|
pm2 restart stock-agent
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🚀 开机自启
|
||||||
|
|
||||||
|
### Linux/macOS
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 1. 保存当前进程列表
|
||||||
|
pm2 save
|
||||||
|
|
||||||
|
# 2. 生成启动脚本
|
||||||
|
pm2 startup
|
||||||
|
|
||||||
|
# 3. 按照提示执行命令
|
||||||
|
|
||||||
|
# 4. 验证
|
||||||
|
pm2 list
|
||||||
|
```
|
||||||
|
|
||||||
|
### 重启后恢复
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 恢复保存的进程列表
|
||||||
|
pm2 resurrect
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📝 最佳实践
|
||||||
|
|
||||||
|
### 1. 开发环境
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 使用开发模式
|
||||||
|
pm2 start ecosystem.config.js --env development
|
||||||
|
|
||||||
|
# 开启文件监控(可选)
|
||||||
|
pm2 start ecosystem.config.js --watch
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. 生产环境
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 使用生产模式
|
||||||
|
pm2 start ecosystem.config.js --env production
|
||||||
|
|
||||||
|
# 保存进程列表
|
||||||
|
pm2 save
|
||||||
|
|
||||||
|
# 设置开机自启
|
||||||
|
pm2 startup
|
||||||
|
```
|
||||||
|
|
||||||
|
### 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
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🎯 完整工作流程
|
||||||
|
|
||||||
|
### 首次部署
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 1. 确保依赖已安装
|
||||||
|
cd backend
|
||||||
|
pip install -r requirements.txt
|
||||||
|
cd ..
|
||||||
|
|
||||||
|
# 2. 配置 .env 文件
|
||||||
|
cp .env.example .env
|
||||||
|
# 编辑 .env 文件
|
||||||
|
|
||||||
|
# 3. 创建日志目录
|
||||||
|
mkdir -p logs
|
||||||
|
|
||||||
|
# 4. 启动应用
|
||||||
|
pm2 start ecosystem.config.js
|
||||||
|
|
||||||
|
# 5. 保存进程列表
|
||||||
|
pm2 save
|
||||||
|
|
||||||
|
# 6. 查看状态
|
||||||
|
pm2 status
|
||||||
|
|
||||||
|
# 7. 查看日志
|
||||||
|
pm2 logs stock-agent
|
||||||
|
```
|
||||||
|
|
||||||
|
### 日常维护
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 查看状态
|
||||||
|
pm2 status
|
||||||
|
|
||||||
|
# 查看日志
|
||||||
|
pm2 logs stock-agent --lines 50
|
||||||
|
|
||||||
|
# 重启应用
|
||||||
|
pm2 restart stock-agent
|
||||||
|
|
||||||
|
# 清空日志
|
||||||
|
pm2 flush
|
||||||
|
```
|
||||||
|
|
||||||
|
### 更新代码后
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 1. 拉取最新代码
|
||||||
|
git pull
|
||||||
|
|
||||||
|
# 2. 重启应用
|
||||||
|
pm2 restart stock-agent
|
||||||
|
|
||||||
|
# 3. 查看日志确认
|
||||||
|
pm2 logs stock-agent --lines 20
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📚 参考链接
|
||||||
|
|
||||||
|
- PM2 官方文档: https://pm2.keymetrics.io/
|
||||||
|
- PM2 GitHub: https://github.com/Unitech/pm2
|
||||||
|
|
||||||
|
## ⚠️ 注意事项
|
||||||
|
|
||||||
|
1. **生产环境**:关闭 `watch` 选项,避免性能问题
|
||||||
|
2. **日志管理**:定期清理或配置日志轮转,避免磁盘占满
|
||||||
|
3. **内存监控**:设置合理的 `max_memory_restart`
|
||||||
|
4. **开机自启**:生产环境建议设置开机自启
|
||||||
|
5. **环境变量**:确保 `.env` 文件配置正确
|
||||||
|
|
||||||
|
## 🎉 完成
|
||||||
|
|
||||||
|
配置完成后,你的应用将:
|
||||||
|
|
||||||
|
- ✅ 在后台持续运行
|
||||||
|
- ✅ 崩溃后自动重启
|
||||||
|
- ✅ 支持开机自启
|
||||||
|
- ✅ 自动管理日志
|
||||||
|
- ✅ 实时监控状态
|
||||||
|
|
||||||
|
所有系统(SmartAgent、CryptoAgent、StockAgent、模拟交易)都会自动启动并运行!
|
||||||
@ -3,17 +3,31 @@ module.exports = {
|
|||||||
name: 'stock-agent',
|
name: 'stock-agent',
|
||||||
script: 'backend/app/main.py',
|
script: 'backend/app/main.py',
|
||||||
interpreter: 'python3',
|
interpreter: 'python3',
|
||||||
cwd: '/Users/aaron/source_code/Stock_Agent',
|
interpreter_args: '--u',
|
||||||
env: {
|
// 自动获取当前目录
|
||||||
ENV_FILE: '/Users/aaron/source_code/Stock_Agent/.env'
|
cwd: process.cwd(),
|
||||||
},
|
|
||||||
instances: 1,
|
instances: 1,
|
||||||
autorestart: true,
|
autorestart: true,
|
||||||
watch: false,
|
watch: false,
|
||||||
max_memory_restart: '1G',
|
max_memory_restart: '1G',
|
||||||
error_file: './logs/err.log',
|
error_file: './logs/pm2-error.log',
|
||||||
out_file: './logs/out.log',
|
out_file: './logs/pm2-out.log',
|
||||||
log_file: './logs/combined.log',
|
log_file: './logs/pm2-combined.log',
|
||||||
time: true
|
time: true,
|
||||||
|
// 进程管理
|
||||||
|
kill_timeout: 5000,
|
||||||
|
wait_ready: true,
|
||||||
|
// 健康检查
|
||||||
|
min_uptime: '10s',
|
||||||
|
max_restarts: 10,
|
||||||
|
// 环境变量
|
||||||
|
env_production: {
|
||||||
|
NODE_ENV: 'production',
|
||||||
|
DEBUG: 'False'
|
||||||
|
},
|
||||||
|
env_development: {
|
||||||
|
NODE_ENV: 'development',
|
||||||
|
DEBUG: 'True'
|
||||||
|
}
|
||||||
}]
|
}]
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user