Skip to content

Releases: chenkai2/dsh-daemon

v0.1.27 — 健康检查 10s + 启动失败可查明细(dsh-daemon logs)

Choose a tag to compare

@chenkai2 chenkai2 released this 16 Oct 13:10

变更

1. 健康检查间隔 30s → 10s

watchdog 的 /health 轮询默认间隔改为 10 秒(DSH_DAEMON_HEALTH_INTERVAL 仍可覆盖,支持 ms/s/m)。
失败阈值仍是连续 3 次,因此「进程活着、超过宽限期仍未健康」的重启判定从约 90 秒缩短到约 30 秒;
睡眠唤醒判定(90 秒 tick gap)与最小重启间隔(15 秒)都大于 tick,不会误判也不会热重启。

2. 启动失败可查明细:dsh-daemon logs

dsh web 没起来时,现在像 systemctl 一样直接告诉你去哪看明细:

  • 新增 dsh-daemon logs [-n N] [--web | --watchdog](watchdog 的 --logs 模式,bash/cmd 包装脚本同步生成):
    默认打印 dsh-web.log 与 watchdog.log 各 50 行,先给诊断头(/health 状态、托管 PID 是否存活、
    本次启动多久、是否处于暂停状态),末尾给出 tail -f 实时跟踪命令;
  • 所有失败路径都打印入口:dsh-daemon start / restart 失败、status 不健康、
    spawn 失败、进程消失重启、失败阈值重启,均输出
    Details: dsh-daemon logs -n 100 (raw log: …/dsh-web.log);
    生成的 watchdog 自身日志行也带 (details: dsh-daemon logs -n 100),只看 watchdog.log 也能找到出口;
  • 新增工具 dsh_daemon_logs(参数 lines、source),沙箱/无终端场景拿到同样内容。

测试

  • 新增 test/logs-command.test.js:用真实生成的 watchdog + 秒退的假 dsh 覆盖
    10s 默认 tick 固化、失败提示、--logs 两种筛选与未知参数、CLI 转发、工具输出(26 项断言);
    该用例以动态沙箱方式加载插件,不依赖 @deepseek-ai/dsh-tools,发布流水线零额外依赖;
  • npm test 与 npm run test:ci 全绿(version-gate / token-auth / registration-drift /
    startup-grace / logs-command)。

升级

自动更新(默认 6 小时一次)会把包升到 0.1.27,插件下次启动时按 GEN_VERSION 自动重新生成
watchdog 与 CLI;要立刻生效可运行一次 dsh_daemon_reinstall(仅重启 watchdog,不动 dsh web)。

v0.1.26 — 慢启动的 dsh web 不再被判死

Choose a tag to compare

@chenkai2 chenkai2 released this 16 Oct 07:54

v0.1.26 — 慢启动的 dsh web 不再被 watchdog 判死

修的问题

手动 dsh web 能启动(十几秒),但由 dsh-daemon 托管时起不来,status 一直报 ❌ unhealthy,watchdog 日志每 ~90 秒一次 failure threshold reached, restarting web server。两层根因:

  1. 启动期被判死:健康检查 30s 一跳、连续 3 次失败即重启,正好把仍在启动(大插件集 / 冷缓存)的 dsh web 当成卡死,SIGKILL 后重新计时,进程永远走不完启动。
  2. 端口未释放就连着重启:停止旧进程后约 16ms 就拉起新的,3080 还占着,新进程在插件激活期 listen EADDRINUSE 秒退 → 秒退被判死 → 再重启,形成死亡循环。手动启动没有这一步,所以正常。

改动

  • 新增启动宽限期 DSH_DAEMON_STARTUP_GRACE(默认 5m,支持 90s/5m 等写法):宽限期内进程存活时,健康检查失败不计入重启阈值、也不会被杀,只记 dsh web still starting (Xs of Ys grace, PID n) — not restarting。
  • 停旧进程改为 SIGTERM → 最多等 8s → SIGKILL → 等端口真正空闲(最多 5s) 才拉起新进程,杜绝 EADDRINUSE 连锁。
  • 新增 15s 最小重启间隔(进程秒退时不再热循环);托管进程已消失(崩溃 / OOM / 激活期报错)时立即重启,不再等满 3 次失败。
  • dsh-daemon status / start / restart 如实上报:⏳ still starting … 启动宽限期、❌ unhealthy … no managed web process running、端口被非托管进程占用,并打印 dsh-web.log 最后几行;start/restart 会等满宽限期再给结论。stop 也改为优雅停止(先 SIGTERM)。

升级须知

装完 0.1.26 后需要重新生成 watchdog:

dsh-daemon reinstall      # 或 dsh_daemon_reinstall

正在运行的 watchdog 是旧版本生成的脚本,不重新生成不会获得启动宽限期。启动确实很快(十几秒)时可以把宽限期收紧以便更快发现真正的卡死:

DSH_DAEMON_STARTUP_GRACE=90s dsh-daemon reinstall

测试

  • 新增 test/startup-grace.test.js:驱动真实生成的 watchdog + 假 dsh,覆盖 ①宽限期内慢启动不重启不杀进程 ②超过宽限期才重启 ③重启前必先优雅停止(端口先释放),已接入 npm test。
  • CI 仍只跑不依赖本机状态的 npm run test:ci。

v0.1.25

Choose a tag to compare

@chenkai2 chenkai2 released this 14 Oct 06:13

Full Changelog: v0.1.24...v0.1.25

v0.1.24

Choose a tag to compare

@chenkai2 chenkai2 released this 14 Oct 03:34

Full Changelog: v0.1.23...v0.1.24