Files
panel/pkg/os
耗子andClaude Opus 5 59f99cc8fc refactor: 把 context 打通到全部 shell 执行路径
原先 pkg/shell 的执行函数不接 context,整条链路上的命令都无法随请求取消,
靠一条文件级 //nolint:noctx 压着。本次自底向上打通:

- pkg/shell 8 个执行函数加 ctx 首参并改用 exec.CommandContext,
  删除与 Execf 重复的 ExecfWithContext
- pkg/{systemctl,tools,ntp,io,firewall,webserver,db,os} 的相关函数加 ctx,
  firewall.Firewall 接口 10 个方法同步改
- internal/{apps,biz,data,job,service} 逐层打通,biz 的 10 个 Repo 接口
  共 37 个方法加 ctx,mock 已重新生成
- types.App.Status 加 ctx:它经 loader 动态分发,contextcheck 看不穿,
  33 个实现里的 context.Background() 是静态分析发现不了的死角

327 个 shell 调用点全部接上真实 ctx,contextcheck 从 364 条降到 0,
darwin 与 linux 双平台 golangci-lint 均为 0 issues。

其中 104 处用 context.WithoutCancel 显式断开取消链,因为这些操作被中途
杀死会留下损坏状态:面板自更新与自杀式重启(靠 sleep 熬过响应返回,绑
请求 ctx 会永远重启不了)、mongodb 改密码时 fork 的 --noauth 临时实例、
pure-pw 之后的 mkdb、s3fs 挂载失败回滚、写配置后的服务重启、以及各处
defer 清理与回滚闭包。

ExecfWithTimeout 现为 min(ctx, timeout),已逐个核对调用点:面板 HTTP
服务器未设 WriteTimeout、中间件链无 Timeout,请求 ctx 只在客户端真断开
时取消,原有超时语义不变。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-15 00:57:36 +08:00
..
2024-12-29 02:08:26 +08:00