DSH 自助重启插件:把「提权强杀进程树 → 端口释放确认 → 拉起服务 → 存活探测」固化为随时可调用的能力,并让前端自动恢复。
前言¶
DSH 的 host 跑在进程内,插件或配置更新通常需要重启进程。由于 DSH 进程往往运行在提权上下文,普通权限的 Stop-Process 无法终止它且会静默失败。本插件通过注册提权计划任务来实现强杀进程树,随后拉起服务并进行存活探测,并配合前端机制实现用户无感的自动恢复。
核心能力¶
- 提权重启:通过
schtasks /rl HIGHEST注册一次性计划任务,在提权上下文中执行taskkill /F /T树杀端口监听进程。 - 前端自动恢复:服务恢复后自动刷新页面,用户几乎无感。
- 自动发现续跑:重启前扫描内存 agent、会话日志 mtime、后台作业;重启后自动错峰恢复。
- 业务门·防自激环:通过对比唤醒时间与业务输入时间,防止自检循环唤醒。
- 任务账本:支持手动添加、完成、列出任务,记录 sessionId。
- 干跑扫描:提供
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