dsh-web-restart:从界面重启 DSH Web 服务

在 DSH 的插件化架构中,升级 host 或修复插件后通常需要重启服务。以往需要手动在终端执行 kill 命令,且运行中的会话会被中断。dsh-web-restart 插件通过 UI 提供重启入口,并配合独立的监督进程处理真正的服务重启,同时支持自动恢复被中断的会话。

核心功能

  • 界面重启:在侧边栏底部提供重启按钮,支持任何布局。
  • 状态监控:通过圆点颜色指示服务与监督进程状态(绿=运行中,黄=排队中,红=未运行)。
  • 确认机制:点击按钮后弹出居中确认框,防止误触。
  • 自动继续:重启后自动扫描并恢复被中断的会话(需配置开启)。
  • 崩溃自愈:服务意外退出时,监督进程可自动拉起服务。

安装与启用

1. 安装插件

在终端中执行以下命令安装插件:

dsh plugin --profile web add dsh-web-restart

安装完成后,重启 DSH web 服务以生效。

2. 部署监督进程

插件本身只负责发送重启请求,真正的 kill + start 操作由独立的监督进程执行。安装插件后,必须手动部署监督进程,否则按钮将显示红色状态。

  1. 复制脚本:
    mkdir -p ~/.dsh/scripts
    cp scripts/dsh-web-supervisor.sh ~/.dsh/scripts/ && chmod +x ~/.dsh/scripts/dsh-web-supervisor.sh
  1. 配置 launchd:
    cp scripts/com.dsh.web-supervisor.plist.example ~/Library/LaunchAgents/com.dsh.web-supervisor.plist
    # 编辑 plist 文件,将 YOUR_USER 替换为实际用户名
    launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.dsh.web-supervisor.plist
  1. 验证状态:
    等待约 5 秒后,执行以下命令检查状态:
    ~/.dsh/scripts/dsh-web-supervisor.sh status
输出 `running` 且 UI 按钮变为绿色点表示部署成功。

3. 配置自动继续

在 设置 → 插件 → 插件配置 中,找到“重启服务设置”卡片,开启“重启后自动继续中断的会话”开关并保存。

监督进程机制

插件运行在 DSH web 进程内部,无法直接杀死宿主进程(会导致自身随宿主一同退出)。因此,插件仅作为请求方,真正的服务重启由 launchd 托管的监督进程执行。

监督脚本(dsh-web-supervisor.sh)负责轮询请求文件、执行停止与启动、处理端口释放,并在服务崩溃时自动拉起。如果启动失败,它会将错误日志写入监督日志文件,便于排查。

自动继续逻辑

当开启自动继续功能后,服务重启完成(约 2 秒后)会执行一次扫描:

  1. 扫描范围:仅恢复上次启动标记之后被中断的会话。
  2. 恢复条件:识别被强制终止(进程被杀)或因非用户原因中止的会话。用户主动停止的会话不会被恢复。
  3. 恢复行为:
    • 顶层会话及其子代理会被恢复。
    • 如果有 active goal,会自动重新武装并继续运行。
    • 如果没有 active goal,会注入一条合成消息提示继续之前的工作。

相关文件与命令

  • 请求文件:~/.dsh/dsh-web.restart-request
  • 运行状态:~/.dsh/dsh-web-restart.json
  • 监督日志:~/.dsh/dsh-web-restart.log
  • 服务日志:~/.dsh/dsh-web.log

常用命令:

# 查看监督进程状态
~/.dsh/scripts/dsh-web-supervisor.sh status

# 彻底停止守护进程
~/.dsh/scripts/dsh-web-supervisor.sh halt

已知限制

  • 在 include 方式挂载的部署(如仓库 link: 工作区插件)下,插件配置卡片可能因命名空间原因在 UI 中不显示。此时可使用重启弹窗内的开关,或直接编辑 ~/.dsh/settings.yaml 文件。
羽毛球分组比赛记分
小程序二维码

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

小夜