# 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` - 标准输出日志