【Bug 反馈】Docker 停止脚本参数错误及本地显示脚本缺失导致系统管理界面与本地显示双重崩溃
【环境信息】
- 系统版本:飞牛OS (fnOS)
- 硬件平台:Intel 4代 i5 (Haswell 架构),无独立显卡
- 网络环境:有线局域网
【故障现象】
NAS 开机运行约 10 分钟后,出现“上层管理界面全挂,但底层文件共享正常”的半残状态:
- Web 管理界面无法登录,页面卡死。
- SSH 终端连接断开且无法重连。
- 本地物理显示输出 画面停止刷新,显示服务停止工作。
【日志分析与问题定位】
通过提取系统 syslog 日志,发现系统同时存在两个严重的底层 Bug,导致了上述雪崩效应:
Bug 1:Docker 服务停止脚本(ExecStop)参数错误(导致 Web/SSH 崩溃)
日志显示 Docker 在重启/停止时,执行了错误的脚本:
Process: 2330 ExecStop=/bin/sh -c docker stop --time 3 $(docker ps -a -q) (code=exited, status=1/FAILURE)
sh[2490]: Flag --time has been deprecated, use --timeout instead
sh[2490]: docker: 'docker stop' requires at least 1 argument
分析:新版 Docker 废弃了 --time 参数,且当 $(docker ps -a -q) 返回空值时,docker stop 缺少必需的容器 ID 参数。这导致脚本返回 status=1/FAILURE,systemd 将 docker.service 永久标记为 failed。由于飞牛OS的 Web 登录模块(trim_tfa)和核心管理器(dsmgr)高度依赖 Docker,Docker 锁死后直接导致 Web 和 SSH 服务崩溃。
Bug 2:本地显示服务脚本缺失(导致本地 VGA 无输出)
日志显示本地显示服务在启动时找不到脚本文件:
sh[507]: sh: 0: cannot open /usr/trim/bin/start_miniscreen.sh: No such file
trim_wayland.service: Failed with result 'exit-code'.
trim_miniscreen.service: Main process exited, code=exited, status=2/INVALIDARGUMENT
分析:系统缺失 /usr/trim/bin/start_miniscreen.sh 文件(或路径配置错误),导致 trim_wayland 和 trim_miniscreen 服务不断重启失败,最终达到重启上限(Start request repeated too quickly)并彻底停止,导致用户无法通过本地显示器查看 NAS 状态。
【建议修复方案】
- 针对 Bug 1:请修改
/etc/systemd/system/docker.service 中的 ExecStop 脚本,增加容错机制并更新废弃参数:
# 修改前:
ExecStop=/bin/sh -c docker stop --time 3 $(docker ps -a -q)
# 建议修改为:
ExecStop=/bin/sh -c 'docker stop --timeout 3 $(docker ps -q) || true'
- 针对 Bug 2:请检查系统镜像或更新包,确保
/usr/trim/bin/start_miniscreen.sh 文件正确打包并部署到系统中,或修正 trim_wayland.service 和 trim_miniscreen.service 中的脚本调用路径。
【附件】
已附上故障发生时的完整系统日志压缩包,包含 syslog 等关键文件,请查阅。
附件:Debug_Log_20260617201201.zip