220 lines
5.7 KiB
Markdown
220 lines
5.7 KiB
Markdown
# Supervisor 交易进程启动问题排查指南
|
||
|
||
## 🔍 问题1:UnicodeDecodeError(编码错误)
|
||
|
||
### 错误信息
|
||
```
|
||
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb0 in position 0: invalid start byte
|
||
AttributeError: type object 'Faults' has no attribute 'utf-8'
|
||
```
|
||
|
||
### 原因
|
||
Supervisor 的 XML-RPC 接口在读取日志时,如果日志文件包含非UTF-8字符(如中文),会报编码错误。
|
||
|
||
### ✅ 已修复
|
||
- `backend/api/supervisor_account.py` 的 `tail_supervisor()` 函数已修复
|
||
- 如果 `supervisorctl tail` 遇到编码错误,会自动回退到直接读取日志文件
|
||
- `_tail_text_file()` 函数已增强,支持多种编码(UTF-8、GBK、GB2312等)
|
||
|
||
### 验证
|
||
重新启动交易进程,编码错误应该不再出现。
|
||
|
||
---
|
||
|
||
## 🔍 问题2:进程启动失败(exit status 1)
|
||
|
||
### 错误信息
|
||
```
|
||
2026-01-22 15:32:35,250 INFO spawned: 'auto_sys_acc4' with pid 2855641
|
||
2026-01-22 15:32:35,574 INFO success: auto_sys_acc4 entered RUNNING state
|
||
2026-01-22 15:32:36,074 INFO exited: auto_sys_acc4 (exit status 1; not expected)
|
||
```
|
||
|
||
### 排查步骤
|
||
|
||
#### 1. 查看进程错误日志
|
||
|
||
**方法A:通过前端查看**
|
||
- 进入账号配置页面
|
||
- 查看"我的交易进程"部分
|
||
- 点击"查看最近错误日志(stderr)"
|
||
|
||
**方法B:直接查看日志文件**
|
||
```bash
|
||
# 找到日志文件路径(通常在项目根目录的 logs 目录)
|
||
cd /www/wwwroot/autosys_new # 替换为你的项目路径
|
||
tail -n 200 logs/trading_4.err.log # 替换 4 为你的 account_id
|
||
```
|
||
|
||
**方法C:查看 Supervisor 主日志**
|
||
```bash
|
||
# 宝塔面板常见路径
|
||
tail -n 200 /www/server/panel/plugin/supervisor/log/supervisord.log
|
||
```
|
||
|
||
#### 2. 常见原因及解决方案
|
||
|
||
##### 原因1:Python 路径不可执行或依赖缺失
|
||
|
||
**症状**:
|
||
```
|
||
ModuleNotFoundError: No module named 'binance_client'
|
||
或
|
||
/bin/python: No such file or directory
|
||
```
|
||
|
||
**解决方案**:
|
||
1. 检查 Python 路径是否正确:
|
||
```bash
|
||
# 检查 supervisor 配置文件中的 python 路径
|
||
cat /www/server/panel/plugin/supervisor/profile/auto_sys_acc4.ini
|
||
# 或
|
||
cat /www/wwwroot/supervisor_gen/auto_sys_acc4.ini
|
||
```
|
||
|
||
2. 确保使用正确的 Python 环境:
|
||
```bash
|
||
# 设置环境变量(在 supervisor 配置中)
|
||
TRADING_PYTHON_BIN=/www/wwwroot/autosys_new/trading_system/.venv/bin/python
|
||
```
|
||
|
||
3. 检查依赖是否安装:
|
||
```bash
|
||
# 进入 trading_system 的虚拟环境
|
||
source /www/wwwroot/autosys_new/trading_system/.venv/bin/activate
|
||
pip list | grep binance
|
||
```
|
||
|
||
##### 原因2:API 密钥未配置
|
||
|
||
**症状**:
|
||
```
|
||
ERROR - 无法获取账户余额,可能是API权限问题
|
||
ERROR - API密钥未配置
|
||
```
|
||
|
||
**解决方案**:
|
||
1. 在账号配置页面设置 API Key 和 Secret
|
||
2. 确保 API Key 有"合约交易"权限
|
||
3. 检查 IP 白名单设置(如果设置了)
|
||
|
||
##### 原因3:工作目录不存在
|
||
|
||
**症状**:
|
||
```
|
||
FileNotFoundError: [Errno 2] No such file or directory
|
||
```
|
||
|
||
**解决方案**:
|
||
1. 检查 supervisor 配置中的 `directory` 路径是否存在
|
||
2. 确保项目根目录路径正确
|
||
|
||
##### 原因4:权限问题
|
||
|
||
**症状**:
|
||
```
|
||
Permission denied
|
||
```
|
||
|
||
**解决方案**:
|
||
1. 检查日志目录权限:
|
||
```bash
|
||
chmod 755 /www/wwwroot/autosys_new/logs
|
||
```
|
||
|
||
2. 检查 supervisor 运行用户:
|
||
```bash
|
||
# 在 supervisor 配置中设置
|
||
user=www # 替换为实际运行用户
|
||
```
|
||
|
||
##### 原因5:配置管理器初始化失败
|
||
|
||
**症状**:
|
||
```
|
||
ERROR - 配置管理器初始化失败
|
||
```
|
||
|
||
**解决方案**:
|
||
1. 检查数据库连接
|
||
2. 检查 Redis 连接(如果使用)
|
||
3. 检查环境变量配置
|
||
|
||
#### 3. 手动测试启动
|
||
|
||
如果自动启动失败,可以手动测试:
|
||
|
||
```bash
|
||
# 1. 进入项目根目录
|
||
cd /www/wwwroot/autosys_new
|
||
|
||
# 2. 设置环境变量
|
||
export ATS_ACCOUNT_ID=4 # 替换为你的 account_id
|
||
export PYTHONPATH=/www/wwwroot/autosys_new
|
||
|
||
# 3. 使用正确的 Python 环境启动
|
||
/www/wwwroot/autosys_new/trading_system/.venv/bin/python -m trading_system.main
|
||
|
||
# 4. 查看错误信息
|
||
```
|
||
|
||
---
|
||
|
||
## 🔧 修复后的改进
|
||
|
||
### 1. 编码错误修复
|
||
- ✅ `tail_supervisor()` 函数现在会自动回退到直接读取文件
|
||
- ✅ `_tail_text_file()` 支持多种编码(UTF-8、GBK、GB2312等)
|
||
|
||
### 2. 错误诊断增强
|
||
- ✅ 启动失败时会自动读取多种日志源:
|
||
- Supervisor stderr 日志
|
||
- Supervisor stdout 日志
|
||
- 直接读取日志文件
|
||
- Supervisor 主日志
|
||
|
||
### 3. 日志编码统一
|
||
- ✅ 所有日志文件使用 UTF-8 编码
|
||
- ✅ 读取时支持多种编码回退
|
||
|
||
---
|
||
|
||
## 📋 快速检查清单
|
||
|
||
当进程启动失败时,按以下顺序检查:
|
||
|
||
1. ✅ **查看错误日志**:`logs/trading_{account_id}.err.log`
|
||
2. ✅ **检查 Python 路径**:supervisor 配置中的 `command` 路径是否正确
|
||
3. ✅ **检查依赖**:`pip list | grep binance` 确认依赖已安装
|
||
4. ✅ **检查 API 密钥**:账号配置页面是否已设置
|
||
5. ✅ **检查权限**:日志目录和项目目录是否有读写权限
|
||
6. ✅ **检查环境变量**:`ATS_ACCOUNT_ID` 是否正确设置
|
||
7. ✅ **手动测试**:使用命令行手动启动,查看详细错误
|
||
|
||
---
|
||
|
||
## 🆘 如果问题仍然存在
|
||
|
||
1. **收集信息**:
|
||
- 错误日志(stderr)
|
||
- Supervisor 配置(.ini 文件)
|
||
- 手动启动的输出
|
||
|
||
2. **检查系统日志**:
|
||
```bash
|
||
# 查看系统日志
|
||
journalctl -u supervisord -n 100
|
||
```
|
||
|
||
3. **联系支持**:提供完整的错误信息和日志
|
||
|
||
---
|
||
|
||
## 📝 相关文件
|
||
|
||
- `backend/api/supervisor_account.py` - Supervisor 管理代码
|
||
- `backend/api/routes/accounts.py` - 账号管理 API
|
||
- `trading_system/main.py` - 交易系统主程序
|
||
- `logs/trading_{account_id}.err.log` - 错误日志
|
||
- `logs/trading_{account_id}.out.log` - 标准输出日志
|