dsh-restart-web:在 DSH Web 設置面板一鍵安全重啓進程

前言

如果你通過 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 配置中 platformweb,並注入 @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.jsPOST /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 -mlib/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、幻方無官方從屬關係)
羽毛球分组比赛记分
小程序二维码

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

小夜