DSH 自助重啓插件:把「提權強殺進程樹 → 端口釋放確認 → 拉起服務 → 存活探測」固化爲隨時可調用的能力,並讓前端自動恢復。
前言¶
DSH 的 host 跑在進程內,插件或配置更新通常需要重啓進程。由於 DSH 進程往往運行在提權上下文,普通權限的 Stop-Process 無法終止它且會靜默失敗。本插件通過註冊提權計劃任務來實現強殺進程樹,隨後拉起服務並進行存活探測,並配合前端機制實現用戶無感的自動恢復。
核心能力¶
- 提權重啓:通過
schtasks /rl HIGHEST註冊一次性計劃任務,在提權上下文中執行taskkill /F /T樹殺端口監聽進程。 - 前端自動恢復:服務恢復後自動刷新頁面,用戶幾乎無感。
- 自動發現續跑:重啓前掃描內存 agent、會話日誌 mtime、後臺作業;重啓後自動錯峯恢復。
- 業務門·防自激環:通過對比喚醒時間與業務輸入時間,防止自檢循環喚醒。
- 任務賬本:支持手動添加、完成、列出任務,記錄 sessionId。
- 幹跑掃描:提供
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