在 DSH 的插件化架构中,升级 host 或修复插件后通常需要重启服务。以往需要手动在终端执行 kill 命令,且运行中的会话会被中断。dsh-web-restart 插件通过 UI 提供重启入口,并配合独立的监督进程处理真正的服务重启,同时支持自动恢复被中断的会话。
核心功能¶
- 界面重启:在侧边栏底部提供重启按钮,支持任何布局。
- 状态监控:通过圆点颜色指示服务与监督进程状态(绿=运行中,黄=排队中,红=未运行)。
- 确认机制:点击按钮后弹出居中确认框,防止误触。
- 自动继续:重启后自动扫描并恢复被中断的会话(需配置开启)。
- 崩溃自愈:服务意外退出时,监督进程可自动拉起服务。
安装与启用¶
1. 安装插件¶
在终端中执行以下命令安装插件:
dsh plugin --profile web add dsh-web-restart
安装完成后,重启 DSH web 服务以生效。
2. 部署监督进程¶
插件本身只负责发送重启请求,真正的 kill + start 操作由独立的监督进程执行。安装插件后,必须手动部署监督进程,否则按钮将显示红色状态。
- 复制脚本:
mkdir -p ~/.dsh/scripts
cp scripts/dsh-web-supervisor.sh ~/.dsh/scripts/ && chmod +x ~/.dsh/scripts/dsh-web-supervisor.sh
- 配置 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
- 验证状态:
等待约 5 秒后,执行以下命令检查状态:
~/.dsh/scripts/dsh-web-supervisor.sh status
输出 `running` 且 UI 按钮变为绿色点表示部署成功。
3. 配置自动继续¶
在 设置 → 插件 → 插件配置 中,找到“重启服务设置”卡片,开启“重启后自动继续中断的会话”开关并保存。
监督进程机制¶
插件运行在 DSH web 进程内部,无法直接杀死宿主进程(会导致自身随宿主一同退出)。因此,插件仅作为请求方,真正的服务重启由 launchd 托管的监督进程执行。
监督脚本(dsh-web-supervisor.sh)负责轮询请求文件、执行停止与启动、处理端口释放,并在服务崩溃时自动拉起。如果启动失败,它会将错误日志写入监督日志文件,便于排查。
自动继续逻辑¶
当开启自动继续功能后,服务重启完成(约 2 秒后)会执行一次扫描:
- 扫描范围:仅恢复上次启动标记之后被中断的会话。
- 恢复条件:识别被强制终止(进程被杀)或因非用户原因中止的会话。用户主动停止的会话不会被恢复。
- 恢复行为:
- 顶层会话及其子代理会被恢复。
- 如果有 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文件。