DSH Web 重启插件:一键重启 DSH Web 宿主

DSH Web 是常驻宿主进程,修改插件、配置或安装新 bundle 后必须重启才能生效。手动重启通常涉及打开终端、查找 PID、杀进程、拉起服务、自检以及刷新页面等多个步骤,过程繁琐且缺乏实时反馈。本文介绍 lnyuqian/dsh-restart-plugin,通过侧边栏按钮或对话指令,将上述流程收敛为静默的一键操作。

核心功能

  • 双态侧边栏按钮:支持展开显示文字 [↻ 重启] 与收起显示图标 ↻,动画跟手,实时同步侧边栏状态。
  • 倒计时与状态反馈:点击后进入 10 秒倒计时,页面整体文字变浅灰,按钮保持醒目,提供清晰的状态反馈。
  • 静默执行:通过 wscript 静默启动 PowerShell,桌面无弹窗、无终端窗口、不开启新标签页,由原页面自动刷新收尾。
  • 自检探针:重启后自动执行端口(3080)和路由(GET /_dsh/dsh-restart/state)双重验证,仅在自检成功时提示。
  • 对话触发:支持在对话中使用 dsh_restart 工具,适合在当前回合需要收尾的场景。

前置条件

  • 操作系统:仅支持 Windows(依赖 schtasks / wscript / PowerShell,Linux / macOS 不适用)。
  • DSH Web:建议使用 0.2.0-rc.x 版本(0.1.0 也能运行,但 DSH 0.2.x 可能将其判为不兼容)。
  • Node.js:需要 Node.js >= 24.11。
  • 权限:当前用户需有创建计划任务的权限。

安装与部署

本插件由两部分组成,缺一不可:前端插件包和本地重启脚本链。

第 1 步:注册插件包

在终端执行以下命令,将本地目录注册为 DSH Web profile 的依赖:

dsh plugin --profile web add link:.\\dsh-restart-plugin

注册完成后,需停止并重新启动 dsh web,然后在浏览器中硬刷新页面(Ctrl+Shift+R)。此时侧边栏应出现重启按钮,且 http://127.0.0.1:3080/_dsh/dsh-restart/state 路由可正常返回状态。

第 2 步:部署重启脚本链

插件包仅包含前端组件,重启逻辑(杀进程、拉起、自检)需通过本地脚本实现。使用官方提供的安装脚本一键部署:

powershell -ExecutionPolicy Bypass -File docs\\setup\\install.ps1 -InstallDir "$env:USERPROFILE\\.dsh-restart" -Seconds 10

此步骤会自动完成三件事:
1. 将模板文件复制到指定目录,并根据参数替换占位符。
2. 注册计划任务(默认名 dsh-web-restart-20s)。
3. 自动修改插件源码中的路径常量。

注意:.ps1 文件需保存为 UTF-8 带 BOM,.vbs / .bat 需保存为 GBK,以确保中文路径和执行正确。

使用方式

  • 侧边栏操作:点击侧边栏按钮,等待 10 秒倒计时结束,页面自动刷新并在右上角显示“✅ 重启成功”。
  • 对话操作:在对话中输入“重启”,触发 dsh_restart 工具。
  • 计划任务操作:通过命令行手动触发计划任务:
    schtasks /Run /TN "dsh-web-restart-20s"

工作原理

  1. 触发:用户点击按钮或触发 dsh_restart 工具。
  2. 执行:工具调用 dsh_restart 路由,触发计划任务 dsh-web-restart-20s。
  3. 等待:wscript 静默启动 PowerShell,执行 10 秒倒计时,页面整体变灰。
  4. 重启:倒计时结束后,脚本杀掉旧宿主进程,使用 --no-open 参数拉起新实例。
  5. 自检:新实例启动后,脚本验证 3080 端口监听及自检路由。
  6. 收尾:自检成功则原页面刷新,失败则按钮变红提示重试。

总结

该插件通过计划任务与脚本链的配合,解决了 DSH Web 重启操作繁琐、易出错且缺乏反馈的问题。安装前请确保环境符合前置条件,并注意脚本文件的编码要求。

  • GitHub 仓库:https://github.com/lnyuqian/dsh-restart-plugin
  • 插件目录:https://www.skillhub.cn/plugins/lnyuqian/dsh-restart-plugin
羽毛球分组比赛记分
小程序二维码

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

小夜