前言¶
在 DSH Web 環境中,無論是 Agent 觸發還是手動操作,重啓服務時往往會導致連接中斷,用戶需要重新發起會話才能獲取上下文。dsh-restart-progress 插件解決了這一體驗斷層問題。它通過頁內遮罩、分離式重啓腳本以及自動報告機制,讓服務重啓過程全程可視、自動且可恢復。
核心功能¶
該插件包含以下核心能力:
* 提前顯示遮罩:執行重啓腳本的瞬間(服務未斷),2 秒內出現全屏轉圈遮罩,等待服務恢復。
* 自動刷新:服務恢復且重啓任務收尾完成後,頁面自動刷新回到 DSH。
* 自動報告:重啓完成後,腳本自動向發起重啓的會話發送“已重啓”消息,喚醒 Agent。
* 隨時退出:遮罩右上角提供 ✕ 按鈕,或按 Esc 鍵,可立即退出遮罩並停止自動刷新。
* 防死循環:只有在“服務在線 + 重啓任務收尾完成”雙條件滿足時才刷新頁面。
* 分離式執行:使用 Windows 計劃任務執行真正的殺舊、啓新動作,脫離 DSH 進程樹,防止 Agent 腳本被誤殺。
安裝與啓用¶
先通過官方命令安裝插件,重啓 DSH Web 後驗證注入狀態。
dsh plugin --profile web add "github:SMWHff/dsh-restart-progress"
安裝後重啓 DSH Web。在瀏覽器控制台(F12)查看是否出現以下提示,表示插件已注入:
[dsh-restart-progress] armed (poll every 2s)
配置¶
安裝後,需將腳本複製到本地並修改硬編碼路徑以匹配你的環境。
- 複製
scripts/restart-dsh-web.ps1到~/.dsh/scripts/目錄。 - 打開腳本,修改以下變量:
$logDir:日誌與標誌文件目錄(默認C:\Users\SMWHff\.dsh\logs)。$env:DSH_HOME:DSH 數據目錄(默認C:\Users\SMWHff\.dsh)。$node:node.exe 實際路徑。$bin:dsh bin.js 實際路徑。-WorkingDirectory:啓動工作目錄。
使用方式¶
重啓腳本支持 Agent 觸發和終端手動觸發兩種方式。
- Agent 在會話內觸發(推薦):
Agent 執行以下命令,腳本會繼承DSH_SESSION_ID,重啓完成後自動通知該會話。
& ~/.dsh/scripts/restart-dsh-web.ps1
- 終端手動觸發:
在任意終端執行相同命令。此時若無DSH_SESSION_ID,僅執行重啓並顯示遮罩,不會發送通知。
注意事項¶
- 平臺限制:僅支持 Windows 10/11。
- 路徑配置:必須根據實際安裝路徑修改腳本中的硬編碼變量,否則重啓任務無法執行。
- 退出機制:
Esc或✕退出只對當前這一輪生效,下一輪重啓會正常顯示遮罩。 - 編碼問題:在 Windows PowerShell 5.1 環境下存在 GBK 編碼兼容性問題,腳本中已通過 base64 處理中文,請勿隨意修改腳本編碼。