软件列表为空是因后台索引数据未加载,需按顺序执行三步:确保网络通畅、删除并重载softList.json、执行bt 19重载模块,最后强刷浏览器。

软件列表为空,不是前端显示问题,而是后台索引数据没加载进来——直接点右上角“修复”按钮大概率无效,尤其当面板已无法正常响应接口请求时。
为什么点右上角“修复”按钮经常没用
那个按钮依赖面板 Web 后端服务(bt 进程)正常运行、且能访问 /api/softlist 接口。一旦网络不通、缓存损坏或 Python 环境异常,点击后页面可能无反应、报 500 错误,或提示“修复完成”但列表依旧空白。
常见现象包括:curl -I https://api.bt.cn/api/softlist 返回 Connection refused 或超时;执行 bt 16 卡在 “正在校验 Python 模块…” 不动;/www/server/panel/data/softList.json 文件为空或 JSON 格式错误。
- 该按钮本质是调用
tools.pyc repair_panel,不强制刷新远程索引,也不清理旧缓存文件 - 若
/www/server/panel/pyenv目录损坏(比如被误删或权限错乱),修复脚本会静默失败 - CentOS 8+ 或使用了自定义 Python 环境的服务器,面板可能根本找不到
requests模块,导致所有 API 请求失败
真正起效的三步实操顺序
别跳步,按这个顺序执行才能覆盖绝大多数更新后列表为空的场景:
- 先确保网络通:执行
curl -sS https://api.bt.cn/api/softlist | head -n 1,看到{"code":200才继续;否则检查防火墙、DNS、/etc/hosts是否劫持了api.bt.cn - 清空旧索引并强制拉取最新:执行
rm -f /www/server/panel/data/softList.json,再运行curl -sS https://api.bt.cn/api/softlist > /www/server/panel/data/softList.json - 重载软件管理模块:执行
bt 19(不是bt restart,后者只重启服务,不触发插件索引重建)
完成后等 10 秒,再用 Ctrl + Shift + R 强刷浏览器,避免加载本地过期 JS 缓存。
bt 16 什么时候该用、什么时候不该用
bt 16 是覆盖最广的一键修复命令,但它默认不重置 softList.json,也不替换 plugin_list.json —— 这两个文件正是软件列表和插件列表的源头。
- 适用场景:面板打不开、登录页报
System Error、python tools.pyc报No module named 'panelSite' - 慎用场景:软件列表为空但其他功能(如网站管理、监控图表)都正常——此时
bt 16可能白跑一趟,还可能因强制重装 Python 包引发新冲突 - 补刀操作:如果执行
bt 16后仍为空,立刻补上bt 30(刷新插件索引)和手动下载softList.json,不要等它自己恢复
国内用户注意镜像源与证书兼容性
部分阿里云/腾讯云轻量服务器默认禁用 SNI 或使用老旧 OpenSSL,访问 https://api.bt.cn 时会握手失败,表现为 curl 返回 SSL connect error。
- 临时绕过:用 HTTP 镜像源(仅限调试):
curl -sS http://api.bt.cn:8080/api/softlist > /www/server/panel/data/softList.json - 长期方案:升级系统 OpenSSL(CentOS 7 执行
yum update openssl -y),或换用宝塔官方推荐的国内镜像地址(需确认是否已在/www/server/panel/class/config.py中配置) - 验证方式:执行
python -c "import ssl; print(ssl.OPENSSL_VERSION)",低于OpenSSL 1.1.1的版本建议升级
真正卡住的点往往不在面板界面里,而在 /www/server/panel/data/ 下那几个 JSON 文件有没有内容、格式对不对、权限是不是 www:www —— 别信“刷新就行”,先看文件。


















