dsh-web-lifecycle:在侧边栏添加重启与关机按钮

在 DSH Web 开发流程中,停止或重启服务器通常需要在终端操作,这会打断当前的浏览器会话或丢失端口上下文。dsh-web-lifecycle 插件通过在侧边栏底部提供直接的交互按钮,解决了这一问题。

插件简介

这是一个 DSH Web 插件,由 DDA-DIGITAL 维护。它将“重启”和“关机”两个按钮添加到侧边栏底部。该插件不依赖任何运行时库,仅使用 Node.js 内置模块。如果当前环境不支持(如缺少 webServer 或 appExit),插件将保持静默,不影响宿主。

核心功能

  1. 重启:保持相同的端口和会话(Cookie 权限不变),支持独立运行或通过 dshweb 包装器运行。重启会中断当前所有活动任务。
  2. 关机:停止服务器并关闭标签页。如果浏览器限制(如普通标签页)导致无法自动关闭,会显示全屏提示卡片。

安装与启用

通过以下命令安装插件:

dsh plugin --profile web add github:DDA-DIGITAL/dsh-web-lifecycle

安装后,重启 dsh web 以加载宿主端,刷新页面以加载客户端。

典型用法

重启

重启有两种运行模式,根据是否使用 dshweb 包装器而定:

  • dshweb 包装器:插件退出码为 75,包装器检测到该代码后,会在约 1 秒内重新启动服务器并重新加载页面。
  • 独立模式:插件生成一个协调器进程,监听端口释放并等待新服务器健康检查,日志记录在 $DSH_HOME/plugins-data/dsh-web-lifecycle/restart.log。

关机

插件退出码为 0,确保包装器停止重启循环。页面会尝试调用 window.close() 关闭标签页。由于浏览器安全限制,window.close() 仅对由脚本打开的窗口有效。在普通浏览器标签页中,此方法会失效,页面会显示全屏提示卡片。

配置说明

默认配置位于插件的 cordis.patch.yml 行中,可通过 $DSH_HOME/profiles/web/cordis.patch.yml 覆盖。关键配置项包括:

  • confirm:是否在执行操作前显示确认弹窗(默认为 true)。
  • allowShutdown:是否显示关机按钮(默认为 true)。
  • healthTimeoutMs:独立模式下等待新服务器健康检查的超时时间(默认为 30000 毫秒)。
  • logToConsole:是否将插件的决策日志输出到 dsh web 的日志中(默认为 true)。

注意事项

  • 浏览器限制:window.close() 在普通浏览器标签页中无效,需手动按快捷键关闭。
  • 守护进程:关机仅停止进程,系统级守护进程(如 launchd/systemd/pm2)可能会将其重启,插件本身不支持处理这种情况。
  • 会话中断:无论是重启还是关机,都会中断当前所有的活跃任务、子代理和后台作业。
  • 启用验证:如果按钮未显示,请运行 dsh --profile web --dump-config 确认 web-lifecycle 是否已列出,并确保已重启 dsh web。

该插件通过 Exit Code 协议(75=重启,0=关机)与 DSH 环境交互,简化了 Web 端的服务器管理。更多详情请访问 GitHub。

羽毛球分组比赛记分
小程序二维码

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

小夜