dsh-web-restart:侧边栏一键完整重启 DSH Web 的插件

前言

在 DSH 的插件机制里,Web 侧边栏和 agent 工具都可以扩展。对于经常在前台终端运行 dsh web 的场景,一次完整重启通常需要手动结束当前进程,再用原始命令重新启动;如果旧进程还没有退出,或者 Web 端口仍被占用,重启就容易失败。

dsh-web-restart 针对这个流程提供侧边栏按钮和 agent 可调用工具:终止当前 dsh web 进程,并在旧进程退出、端口空闲后,以相同命令重新拉起。重启期间页面不刷新,同一会话标签页会自动恢复 UI。

这是什么

dsh-web-restart 是一个 DSH Web 插件,用于从侧边栏一键完整重启 harness。

它会做三件事:

  1. 结束当前 dsh web 进程。
  2. 通过启动守卫等待旧进程退出且 Web 端口空闲。
  3. 以相同命令行重新拉起 dsh web,并保留原有运行参数。

仓库路径为 csdjl88/dsh-web-restart,许可证为 MIT。由于 npm 名称 dsh-restart 已被同目的项目占用,该插件发布为 dsh-web-restart

核心功能

侧边栏重启按钮

插件在 sidebar.footer.action 行提供一个重启按钮。点击后会直接触发重启,没有确认对话框。该设计适用于 single-user、trusted-host 场景。

完整进程重启

插件会终止当前 dsh web 进程,并以相同命令行重新拉起。重启会保留 --profile--patch 及内部参数,并且始终确保新进程带有 --no-open,避免再弹出一个浏览器窗口。

启动守卫

新进程不会立即启动。插件会等待旧进程退出,并且确认 Web 端口空闲后,才拉起新的 dsh web。因此,在不需要 systemd、Docker、pm2 等守护进程的情况下,也可以完成一次受控重启。

页面自动恢复

重启期间,按钮会显示 Restarting…,并轮询健康端点。页面不会整页刷新,也不会打开新标签页。DSH WebSocket 自动重连后,UI 会在同一会话标签页恢复。

Agent 可调用工具

插件提供 dsh_restart 工具,可以和 Web 按钮共用同一套重启核心。

单次执行保护

当一次重启正在进行时,重复点击按钮或再次调用工具会被拒绝,避免并发触发多次重启。

双语支持

插件提供中英文双语 UI 文案和 README。

安装与启用

插件要求 DSH 0.1.0-rc.7 或更新版本。

安装命令如下:

dsh plugin --profile web add github:csdjl88/dsh-web-restart

安装完成后,需要重启 DSH,重启按钮才会出现在侧边栏底部。

典型用法

Web 按钮

安装并重启 DSH 后,可以点击侧边栏底部的 Restart DSH 按钮。

重启期间,按钮会显示 Restarting… 并自动轮询。页面不会刷新,DSH WebSocket 自动重连后恢复 UI。

如果新进程在 30 秒内未就绪,界面会显示错误。此时应检查运行 dsh 的终端。

Agent 工具

在对话中可以直接要求重启 DSH。对应工具是 dsh_restart,可选参数为 reason

例如,可以在对话中要求:

restart DSH

需要注意:一次重启会中断所有正在运行的 agent 任务和后台作业。

底层接口与契约

插件通过以下 HTTP 端点触发和检查重启状态:

POST /dsh-restart
GET /dsh-restart/health

其中 POST /dsh-restart 用于触发重启,GET /dsh-restart/health 返回存活信息,并返回 pid,便于前端识别新进程。

插件还会使用以下环境契约:

DSH_RESTARTED_BY
DSH_RESTART_OLD_PID
DSH_RESTART_PORT

适用场景与注意

适合的场景

该插件适用于在前台终端运行 dsh web、且没有 supervisor 自动拉起策略的环境。

它适合用于:

  1. 修改 DSH Web 插件、补丁或相关配置后重启 harness。
  2. 从浏览器侧边栏触发一次完整进程重启。
  3. 让 agent 在对话中直接调用重启工具。

与 supervisor 同时使用时要谨慎

如果运行环境已经使用 systemd、Docker、pm2 等 supervisor,并且配置了自动重启策略,插件的启动守卫和 supervisor 可能同时尝试拉起新进程。

这会导致两个实例竞争端口,其中一个进程可能触发 EADDRINUSE

在受 supervisor 管理的环境中,建议禁用 supervisor 的自动重启策略,或移除 dsh-web-restart 插件。

重启后如何停止 DSH

重启后的新 dsh web 会运行在自己的 session,也就是自己的进程组。旧的前台进程组退出后,可能不再接收终端的 Ctrl+C

停止重启后的 DSH,可以使用以下任一方式:

  1. 关闭运行 dsh 的终端窗口。
  2. 在该终端中按 Ctrl+D
  3. 在新终端中执行:
pkill -f "dsh web"

或者:

kill <pid>

权限与安装前检查

该插件会终止并重新拉起当前 dsh web 进程,相当于对当前 DSH 运行环境执行完整重启。安装前建议检查源码、依赖和 MIT 许可证,确认其行为符合当前使用环境的要求。

结尾

dsh-web-restart 解决的是前台运行 dsh web 时的完整重启问题:保留原命令参数,避免端口竞争,避免打开新标签页,并提供 Web 按钮和 dsh_restart agent 工具。它适合无 supervisor 的前台 DSH Web 环境,也可以让 agent 在对话中直接触发重启。

目录页:

https://www.skillhub.cn/plugins/csdjl88/dsh-web-restart

GitHub 仓库:

https://github.com/csdjl88/dsh-web-restart
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜