DeepSeek Harness (DSH) 採用插件化架構,核心邏輯通過插件擴展。當需要重啓 DS-Hns 實例或操作系統時,直接操作進程往往難以保證數據完整性或安全關機。dsh-restart 作爲一個 DSH 插件,專注於重啓的執行層面。它不負責決定“是否”需要重啓(那是健康調度器的工作),而是確保重啓過程符合鎖機制、檢查點和優雅關閉等安全協議。
定位與職責¶
dsh-restart 是一個 MIT 許可的插件,主要職責是處理重啓請求的執行流程,而非調度決策。它不包含任何健康策略、溫度閾值、時間調度或任務隊列訪問邏輯。
插件加載時會將其重啓適配器發佈到 Harness 上下文的 ctx.healthScheduler 上,以便 dsh-health-scheduler 能夠發現並連接它。如果兩者在同一個 profile 中,無需編寫膠水腳本即可協同工作。
核心功能¶
該插件通過以下步驟確保重啓安全:
- 請求處理:接收並驗證重啓請求。
- 安全門控:通過獨佔鎖防止併發重啓,並通過檢查點門控確保系統處於安全點。
- 票據機制:寫入包含校驗和的票據文件。
- 優雅關閉:向主機請求優雅關閉。
- 觀察與重啓:允許外部觀察者監控退出狀態並執行重啓。
安裝¶
從 npm 或 tarball 安裝(推薦)¶
推薦使用已構建好的 npm 包,避免構建時的代碼執行風險。
dsh plugin --profile web add dsh-restart
從 Git 安裝¶
從 Git 倉庫安裝會運行 npm run build,這意味着在安裝時可能會執行任意代碼。這取決於你的包管理器配置(如 npm 的 prepare 腳本)。
dsh plugin --profile web add github:dsh-restart/dsh-restart
使用安裝腳本¶
使用官方提供的 PowerShell 腳本可以自動完成註冊、驗證和冒煙測試。
pwsh -File scripts/install.ps1
使用 Supervisor 重啓¶
dsh-restart 本身不執行重啓,而是將重啓請求交給外部 Supervisor。Supervisor 是一個獨立的、長生命週期的進程,必須與 DSH 主進程分離運行,以便在主進程退出後接管重啓。
啓動 Supervisor 的命令如下:
node bin/supervisor.mjs --state "$env:DSH_HOME\restart" -- node dsh.js --profile web
Supervisor 負責監視重啓票據、心跳和日誌,並在 DS-Hns 退出後重新啓動它。
注意事項¶
- Git 安裝風險:如前所述,Git 安裝會觸發
npm run build。如果安裝後出現no lib/index.js錯誤,通常是因爲包管理器未正確運行構建腳本,此時應切換到 npm/tarball 安裝或手動構建。 - Supervisor 獨立性:Supervisor 必須是分離的進程。如果作爲子進程啓動,它將隨 DSH 進程一同終止,導致重啓失敗。
- 權限與安全:插件以當前 DSH 進程的權限運行。建議在部署前檢查源代碼與許可證。
總結¶
dsh-restart 提供了重啓執行層的標準化接口,解耦了“何時重啓”的決策邏輯與“如何重啓”的執行邏輯。其最壞情況是“自動重啓不可用”,而非插件本身不可用。