dsh-restart-progress:DSH Web 重启体验插件

前言

在 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)

配置

安装后,需将脚本复制到本地并修改硬编码路径以匹配你的环境。

  1. 复制 scripts/restart-dsh-web.ps1 到 ~/.dsh/scripts/ 目录。
  2. 打开脚本,修改以下变量:
    • $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 处理中文,请勿随意修改脚本编码。
羽毛球分组比赛记分
小程序二维码

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

小夜