dsh-self-restart

DSH 自助重啓插件:把「提權強殺進程樹 → 端口釋放確認 → 拉起服務 → 存活探測」固化爲隨時可調用的能力,並讓前端自動恢復。

前言

DSH 的 host 跑在進程內,插件或配置更新通常需要重啓進程。由於 DSH 進程往往運行在提權上下文,普通權限的 Stop-Process 無法終止它且會靜默失敗。本插件通過註冊提權計劃任務來實現強殺進程樹,隨後拉起服務並進行存活探測,並配合前端機制實現用戶無感的自動恢復。

核心能力

  1. 提權重啓:通過 schtasks /rl HIGHEST 註冊一次性計劃任務,在提權上下文中執行 taskkill /F /T 樹殺端口監聽進程。
  2. 前端自動恢復:服務恢復後自動刷新頁面,用戶幾乎無感。
  3. 自動發現續跑:重啓前掃描內存 agent、會話日誌 mtime、後臺作業;重啓後自動錯峯恢復。
  4. 業務門·防自激環:通過對比喚醒時間與業務輸入時間,防止自檢循環喚醒。
  5. 任務賬本:支持手動添加、完成、列出任務,記錄 sessionId。
  6. 幹跑掃描:提供 scan 方法僅發現不登記,用於驗收。

API 與用法

插件提供 HTTP 接口供外部調用,主要方法如下:

  • ping:探活,返回 {ok, t, pending}。
  • status:查看當前待執行重啓與配置。
  • schedule:調度一次重啓(僅限 loopback 訪問)。
  • scan:幹跑自動發現(只看不登記)。
  • task.add / task.done / task.list:手動任務賬本操作。

觸發重啓

通過 POST 請求觸發重啓:

POST http://127.0.0.1:3080/__dsh-restart/api
Content-Type: application/json

{
  "method": "schedule",
  "args": {
    "delayMs": 15000,
    "reason": "host 插件更新"
  }
}

PowerShell 調用示例:

Invoke-RestMethod http://127.0.0.1:3080/__dsh-restart/api -Method Post -ContentType 'application/json' -Body '{"method":"schedule","args":{"delayMs":15000,"reason":"host 插件更新"}}'

配置

配置文件位於 ~/.dsh/self-restart/config.json:

{
  "port": 3080,
  "startTask": "dsh-web-service",
  "delaySec": 12,
  "autoResume": true,
  "activeWindowMs": 900000,
  "maxAutoRegister": 12,
  "maxAutoResume": 5,
  "staggerMs": 8000,
  "excludeSessions": []
}
  • port:DSH 監聽端口(用於定位要殺的進程)。
  • startTask:拉起 DSH 的 Windows 計劃任務名。
  • delaySec:默認延遲秒數。
  • autoResume:是否自動發現續跑。
  • activeWindowMs:會話日誌活躍窗口時間(默認 15 分鐘)。
  • maxAutoResume:自動續跑任務上限(默認 5)。
  • staggerMs:錯峯恢復間隔(默認 8 秒)。

安裝與啓用

安裝:

npm i dsh-self-restart

啓用:

將包目錄複製進 profile 的 node_modules\dsh-self-restart\,並在 profile 的 package.json 的 dsh.profile.bundles 追加 "dsh-self-restart",重啓 DSH。

注意事項

  • 依賴環境:僅支持 Windows。
  • 權限要求:schedule 接口僅限 loopback (127.0.0.1/::1) 訪問,防止遠程誤觸。
  • 依賴服務:需要預先配置拉起任務(默認 dsh-web-service)。
  • 許可證:MIT
羽毛球分组比赛记分
小程序二维码

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

小夜