5.7 KiB
5.7 KiB
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:直接查看日志文件
# 找到日志文件路径(通常在项目根目录的 logs 目录)
cd /www/wwwroot/autosys_new # 替换为你的项目路径
tail -n 200 logs/trading_4.err.log # 替换 4 为你的 account_id
方法C:查看 Supervisor 主日志
# 宝塔面板常见路径
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
解决方案:
-
检查 Python 路径是否正确:
# 检查 supervisor 配置文件中的 python 路径 cat /www/server/panel/plugin/supervisor/profile/auto_sys_acc4.ini # 或 cat /www/wwwroot/supervisor_gen/auto_sys_acc4.ini -
确保使用正确的 Python 环境:
# 设置环境变量(在 supervisor 配置中) TRADING_PYTHON_BIN=/www/wwwroot/autosys_new/trading_system/.venv/bin/python -
检查依赖是否安装:
# 进入 trading_system 的虚拟环境 source /www/wwwroot/autosys_new/trading_system/.venv/bin/activate pip list | grep binance
原因2:API 密钥未配置
症状:
ERROR - 无法获取账户余额,可能是API权限问题
ERROR - API密钥未配置
解决方案:
- 在账号配置页面设置 API Key 和 Secret
- 确保 API Key 有"合约交易"权限
- 检查 IP 白名单设置(如果设置了)
原因3:工作目录不存在
症状:
FileNotFoundError: [Errno 2] No such file or directory
解决方案:
- 检查 supervisor 配置中的
directory路径是否存在 - 确保项目根目录路径正确
原因4:权限问题
症状:
Permission denied
解决方案:
-
检查日志目录权限:
chmod 755 /www/wwwroot/autosys_new/logs -
检查 supervisor 运行用户:
# 在 supervisor 配置中设置 user=www # 替换为实际运行用户
原因5:配置管理器初始化失败
症状:
ERROR - 配置管理器初始化失败
解决方案:
- 检查数据库连接
- 检查 Redis 连接(如果使用)
- 检查环境变量配置
3. 手动测试启动
如果自动启动失败,可以手动测试:
# 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 编码
- ✅ 读取时支持多种编码回退
📋 快速检查清单
当进程启动失败时,按以下顺序检查:
- ✅ 查看错误日志:
logs/trading_{account_id}.err.log - ✅ 检查 Python 路径:supervisor 配置中的
command路径是否正确 - ✅ 检查依赖:
pip list | grep binance确认依赖已安装 - ✅ 检查 API 密钥:账号配置页面是否已设置
- ✅ 检查权限:日志目录和项目目录是否有读写权限
- ✅ 检查环境变量:
ATS_ACCOUNT_ID是否正确设置 - ✅ 手动测试:使用命令行手动启动,查看详细错误
🆘 如果问题仍然存在
-
收集信息:
- 错误日志(stderr)
- Supervisor 配置(.ini 文件)
- 手动启动的输出
-
检查系统日志:
# 查看系统日志 journalctl -u supervisord -n 100 -
联系支持:提供完整的错误信息和日志
📝 相关文件
backend/api/supervisor_account.py- Supervisor 管理代码backend/api/routes/accounts.py- 账号管理 APItrading_system/main.py- 交易系统主程序logs/trading_{account_id}.err.log- 错误日志logs/trading_{account_id}.out.log- 标准输出日志