Skip to content

[Bug] # Bug 报告:Kun 启动失败(Service Manager / Shared Runtime 无法 Ready) #1256

Description

@Shemonzjw

Summary / 问题概述

环境信息

  • 操作系统:Windows(x64)
  • Kun 安装路径E:\software\Kun
  • Kun 版本线索:buildId 4d51719d64357424d733ec53ef45672d61d5c91b00f9fdcc19e16e80ea125369;manager 协议 protocolVersion: 3;officecli 1.0.141
  • 用户数据目录C:\Users\<user>\.kun\

问题现象

启动 Kun 后出现以下错误(按出现顺序,共三层错误链):

  1. 启动后直接闪退,提示:

    Kun Service Manager did not become ready; inspect C:\Users\<user>\.kun\control\manager.log

  2. 修复第一层后再次启动,仍然闪退,提示同上。
  3. 修复第二层后再次启动,界面能显示,随后又退出,提示:

    Kun shared runtime did not become ready; inspect C:\Users\<user>\.kun\data\logs\runtime.log

Steps to reproduce / 复现步骤

错误日志原文

第一层:control\manager.log

kun service manager: SyntaxError: Unexpected token '\u0000', "\u0000\u0000\u0000\u0000\u0000\u0000..." is not valid JSON
    at JSON.parse (<anonymous>)
    at readPersistedManagerState (file:///E:/software/Kun/resources/app.asar.unpacked/kun/dist/manager/service-manager-state.js:547:49)
    at async Promise.all (index 0)
    at async startServiceManager (.../service-manager-state.js:380:35)
    at async main (.../manager/manager-entry.js:27:20)

对应的状态文件 C:\Users\<user>\.kun\control\manager-state.json 内容全部为 0x00 空字节(1692 字节),非合法 JSON。

第二层:control\manager.log(状态文件改为 {} 后)

kun service manager: ZodError: [
  {
    "code": "invalid_union",
    "errors": [
      [ { "code": "invalid_value", "values": [1], "path": ["version"], "message": "Invalid input: expected 1" },
        { "expected": "array", "code": "invalid_type", "path": ["slots"], "message": "Invalid input: expected array, received undefined" },
        { "expected": "array", "code": "invalid_type", "path": ["leases"], "message": "Invalid input: expected array, received undefined" },
        { "expected": "array", "code": "invalid_type", "path": ["resourceLeases"], "message": "Invalid input: expected array, received undefined" } ],
      [ { "code": "invalid_value", "values": [2], "path": ["version"], "message": "Invalid input: expected 2" },
        { "expected": "array", "code": "invalid_type", "path": ["slots"], ... },
        { "expected": "array", "code": "invalid_type", "path": ["leases"], ... },
        { "expected": "array", "code": "invalid_type", "path": ["resourceLeases"], ... },
        { "expected": "record", "code": "invalid_type", "path": ["resourceFenceHighWater"], "message": "Invalid input: expected record, received undefined" } ]
    ],
    "path": [],
    "message": "Invalid input"
  }
]
    at ServiceManagerState.restore (file:///E:/software/Kun/resources/app.asar.unpacked/kun/dist/manager/service-manager-state.js:95:60)
    at readPersistedManagerState (.../service-manager-state.js:547:36)
    ...

第三层:data\logs\runtime.log

kun serve: ManagerRuntimeSlotBusyError: Kun runtime slot production is already owned by 8b0ed34d-8016-48f6-865d-c069440bb535
    at registerRuntimeWithManager (file:///E:/software/Kun/resources/app.asar.unpacked/kun/dist/manager/manager-client.js:377:19)
    ...
KUN_READY {"service":"kun","mode":"serve","host":"127.0.0.1","port":62408,...,"pid":32072,...}

(runtime 自身监听成功并输出 KUN_READY,但向 manager 注册 production 槽位时因槽位已被占用而抛错,GUI 端 shared runtime 一直无法 ready。)

附带问题:control\manager.log 中反复出现

[kun] hybrid sqlite listPage failed; using JSONL fallback: source.indexCount is not a function
Run `npm rebuild better-sqlite3` if the module is missing or stale.

Expected behavior / 期望行为

  1. readPersistedManagerState 对损坏 JSON 做 try/catch:自动备份损坏文件(如 manager-state.json.corrupt-<ts>)并按默认状态重建,而不是直接 crash。
  2. Zod 校验失败时同样降级重建(或给出明确的修复指引),不要抛未捕获异常。
  3. 状态文件写入采用原子写(临时文件 + rename),避免异常退出产生全空文件。
  4. 启动时检测并回收 stale slot:注册槽位前检查记录中的 pid 是否存活,已死亡的旧槽位自动清理;并加单实例锁,避免多实例并发抢槽位。
  5. better-sqlite3 缺失/不兼容场景,启动时主动检测并提示 npm rebuild better-sqlite3,而不是静默降级后持续刷日志。

Actual behavior / 实际行为

临时解决办法(用户侧 workaround)

  1. 备份并修复状态文件:若 C:\Users\<user>\.kun\control\manager-state.json 不是合法 JSON,备份后写入合法的空结构:
    {"version":2,"slots":[],"leases":[],"resourceLeases":[],"resourceFenceHighWater":{}}
  2. 结束所有残留的 Kun 进程(如 taskkill /F /IM Kun.exe)。
  3. 重新启动 Kun。

Kun version / Kun 版本

0.3.7

Operating system / 操作系统

windows11

Logs / 日志

Checklist / 检查清单

  • I searched existing issues before opening this report. / 我已经搜索过现有 issue。
  • I removed sensitive information from logs and screenshots. / 我已经从日志和截图中移除敏感信息。

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions