前言¶
在 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 处理中文,请勿随意修改脚本编码。