dsh-self-restart

DSH 自助重启插件:把「提权强杀进程树 → 端口释放确认 → 拉起服务 → 存活探测」固化为随时可调用的能力,并让前端自动恢复。

前言

DSH 的 host 跑在进程内,插件或配置更新通常需要重启进程。由于 DSH 进程往往运行在提权上下文,普通权限的 Stop-Process 无法终止它且会静默失败。本插件通过注册提权计划任务来实现强杀进程树,随后拉起服务并进行存活探测,并配合前端机制实现用户无感的自动恢复。

核心能力

  1. 提权重启:通过 schtasks /rl HIGHEST 注册一次性计划任务,在提权上下文中执行 taskkill /F /T 树杀端口监听进程。
  2. 前端自动恢复:服务恢复后自动刷新页面,用户几乎无感。
  3. 自动发现续跑:重启前扫描内存 agent、会话日志 mtime、后台作业;重启后自动错峰恢复。
  4. 业务门·防自激环:通过对比唤醒时间与业务输入时间,防止自检循环唤醒。
  5. 任务账本:支持手动添加、完成、列出任务,记录 sessionId。
  6. 干跑扫描:提供 scan 方法仅发现不登记,用于验收。

API 与用法

插件提供 HTTP 接口供外部调用,主要方法如下:

  • ping:探活,返回 {ok, t, pending}。
  • status:查看当前待执行重启与配置。
  • schedule:调度一次重启(仅限 loopback 访问)。
  • scan:干跑自动发现(只看不登记)。
  • task.add / task.done / task.list:手动任务账本操作。

触发重启

通过 POST 请求触发重启:

POST http://127.0.0.1:3080/__dsh-restart/api
Content-Type: application/json

{
  "method": "schedule",
  "args": {
    "delayMs": 15000,
    "reason": "host 插件更新"
  }
}

PowerShell 调用示例:

Invoke-RestMethod http://127.0.0.1:3080/__dsh-restart/api -Method Post -ContentType 'application/json' -Body '{"method":"schedule","args":{"delayMs":15000,"reason":"host 插件更新"}}'

配置

配置文件位于 ~/.dsh/self-restart/config.json:

{
  "port": 3080,
  "startTask": "dsh-web-service",
  "delaySec": 12,
  "autoResume": true,
  "activeWindowMs": 900000,
  "maxAutoRegister": 12,
  "maxAutoResume": 5,
  "staggerMs": 8000,
  "excludeSessions": []
}
  • port:DSH 监听端口(用于定位要杀的进程)。
  • startTask:拉起 DSH 的 Windows 计划任务名。
  • delaySec:默认延迟秒数。
  • autoResume:是否自动发现续跑。
  • activeWindowMs:会话日志活跃窗口时间(默认 15 分钟)。
  • maxAutoResume:自动续跑任务上限(默认 5)。
  • staggerMs:错峰恢复间隔(默认 8 秒)。

安装与启用

安装:

npm i dsh-self-restart

启用:

将包目录复制进 profile 的 node_modules\dsh-self-restart\,并在 profile 的 package.json 的 dsh.profile.bundles 追加 "dsh-self-restart",重启 DSH。

注意事项

  • 依赖环境:仅支持 Windows。
  • 权限要求:schedule 接口仅限 loopback (127.0.0.1/::1) 访问,防止远程误触。
  • 依赖服务:需要预先配置拉起任务(默认 dsh-web-service)。
  • 许可证:MIT
羽毛球分组比赛记分
小程序二维码

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

小夜