前言¶
如果你通过 Web 界面使用 DSH,大概率遇到过这样的时刻:页面卡死、无响应,或者刚装完一个插件、改完一处配置,需要重启进程才能生效。常规做法是回到终端,找到占用 3080 端口的进程杀掉,再手动启动 DSH,浏览器页面还得自己刷新。
dsh-restart-web 把这套动作收敛成设置面板里的一个按钮:点击后安全重启整个 DSH 进程,浏览器约 5 秒后自动刷新重连,全程不用离开 Web 界面。DSH 的理念是「一切皆插件」,这类界面级的小功能正适合用插件来补齐。
下面介绍它的功能、安装方式和工作原理。
这是什么¶
dsh-restart-web 是 shaoyi1991 维护的一个 DSH 插件,MIT 协议,当前版本 1.0.0。它只做一件事:在 DSH Web 设置面板中添加「重启」入口,点击后安全重启整个 DSH 进程。
从 package.json 看,它的 dsh.client 配置中 platform 为 web,并注入 @deepseek-ai/dsh-client-runtime,是一个面向 Web 端的客户端插件。
核心功能¶
1、在 DSH Web 设置面板添加「重启」按钮,点击后安全重启整个 DSH 进程,浏览器 5 秒后自动刷新重连。
2、跨平台支持:macOS/Linux 使用 lsof + kill + 进程组逃逸,Windows 使用 netstat + taskkill。
3、重启逻辑是独立的 Node.js 脚本(lib/restart.js),以 detached 独立进程启动,不受 DSH 退出清理影响。
4、通过 process.execPath + process.argv[1] 获取绝对路径,不依赖 PATH,兼容通过 npx 安装的 DSH。
5、重启由 host 插件(lib/index.js)通过 POST /api/dsh-restart 触发。
安装与启用¶
标准安装命令:
dsh plugin --profile web add dsh-restart-web
也可以从 GitHub 安装:
dsh plugin --profile web add github:shaoyi1991/dsh-restart-web
注意安装后需要重启一次 DSH 才能生效。之后在 Web UI 中打开 设置 → 重启,就能看到并使用这个入口。
工作原理¶
先看整体流程:
Web 界面(设置 → 重启)
│
▼ POST /api/dsh-restart
Host 插件(lib/index.js)
│
├── macOS/Linux: 用 bash set -m → 在新进程组中启动 restart.js
└── Windows: 直接用 node → 启动 restart.js(detached 模式)
│
├── 1. 等待 2 秒(让 HTTP 响应正常返回)
├── 2. 杀掉占用 3080 端口的进程
├── 3. 启动新的 DSH:node bin.js web
└── 4. 退出(DSH 继续运行)
点击按钮后,请求先发到 host 插件 lib/index.js 的 POST /api/dsh-restart,由它拉起重启脚本 lib/restart.js。脚本会先等 2 秒让 HTTP 响应正常返回,再杀掉占用 3080 端口的进程,然后以 node bin.js web 启动新的 DSH,最后自己退出,由新进程继续服务。
有两个设计点值得展开说一下。
为什么不直接调用 dsh 命令¶
DSH 通常通过 npx 安装,在子进程的清洁环境中,dsh 并不在 PATH 上,直接调用会失败。插件改用 process.execPath + process.argv[1] 拿到 Node 可执行文件和脚本的绝对路径,不依赖 PATH,无论 DSH 是怎么装起来的都能正常重启。
为什么需要 set -m¶
DSH 退出时会自动清理所有子进程组(kill(-pid, SIGKILL))。如果重启脚本还留在原来的进程组里,旧进程退出时会把它一起杀掉,重启就无从谈起。macOS/Linux 上,插件通过 bash set -m 把 lib/restart.js 放进一个新进程组,避开这层清理。Windows 没有这个问题,直接用 detached 模式启动重启脚本即可。
适用场景与注意¶
适合的场景:
- DSH 卡死、无响应时快速恢复;
- 安装新插件或修改配置后需要重新加载;
- 内存占用过高,想通过重启释放。
注意:插件以当前 dsh 进程的权限运行,重启动作会直接杀掉占用 3080 端口的进程,并以 node bin.js web 重新启动 DSH。安装前建议先阅读源码和许可证(MIT),确认没问题再装。
结尾¶
dsh-restart-web 解决的问题很小,但足够高频:把「回终端找进程、kill、重启、刷新页面」变成设置面板里点一下按钮。如果你平时在浏览器里使用 DSH,值得装一个备着。
- GitHub:https://github.com/shaoyi1991/dsh-restart-web
- 社区目录页:https://www.skillhub.cn/plugins/shaoyi1991/dsh-restart-web (社区目录为独立站点,与 DeepSeek、幻方无官方从属关系)