出问题的位置
调度中心 / 软件更新
AUTO-MAS 版本
v5.5.0-beta.2(Windows,D:\Program Files (x86)\AUTO-MAS,非 Runtime 托管)。结构性的那部分 dev 上同样存在。
问题描述
点标题栏「更新后端」之后,后端起来了、界面一切正常、手动运行队列也正常,但当晚 00:05 / 02:30 / 04:05 / 06:05 四个定时队列一个都没触发,直到早上手动重启才恢复。日志里 4 次点「更新后端」有 2 次是这样(09-11 07:43、09-13 22:42)。
原因分两层:
触发 :beta.2 的「更新后端」会被生命周期协调器当成断线事故,尝试恢复后端服务 在源码拉取还没结束时就把后端拉起来,撞上 copyToRoot() 删掉重拷 app/ 的窗口,后台初始化里的懒导入抛 ModuleNotFoundError。这条触发路径 fix(ws): 断开不再立即弹窗,两个前端窗口不再互相抢占后端主连接 #547 起已挡住(beta.3+);顺便给 fix(update): 源码部署先删后拷非原子,中断即留下残缺 app/,启动时报 ModuleNotFoundError #544 补一份实证——那里的 ModuleNotFoundError 至少有一部分就是这个姿势。
放大 :main.py initialize_background_services()(自 优化应用启动流程并提前提供后端就绪状态 #407 起)把 MCP 挂载、活动关卡、清理、ArknightWin32 适配器导入、MainTimer.start()、Koishi 全放在一个 try 里,前面任何一步抛异常就 background_status = "failed" 直接结束——定时器排在适配器导入后面,一起没了。/api/core/health 虽然回了 backgroundStatus: "failed" 和 backgroundError,但前端没有任何地方消费这两个字段(只在生成的 src/api/ 里出现),用户看不到任何异常。dev 54d4e0f 的 main.py:280-413 仍是同一结构。
关键日志(09-13):
frontend.log 22:42:04.744 | 标题栏 | 开始更新后端
frontend.log 22:42:12.336 | 应用生命周期 | 尝试恢复后端服务 (第 1 次)
frontend.log 22:42:15.189 | 后端服务 | 启动后端 - Python: ...\environment\python\python.exe, Main.py: ...\main.py
frontend.log 22:42:19.569 | 仓库服务 | 复制完成: .git
app.log 22:42:19.580 | ERROR | 主程序 | 后台初始化失败: ModuleNotFoundError: No module named 'app.core.maa_manager'
frontend.log 22:42:20.016 | 仓库服务 | 复制完成: app
frontend.log 22:42:22.077 | 后端服务 | 后端服务已在运行,等待健康检查
此后 app.log 直到次日 06:28 重启,没有一条「主业务定时器启动」或「定时唤起任务」。
复现步骤
beta.2:点标题栏「更新后端」,恢复流程起的后端有一定概率撞上 app/ 重拷窗口(偶发,4 次里 2 次)。
任意版本:让 initialize_background_services() 里 MainTimer.start() 之前的任一步抛异常(例如临时把 app/MaaFW/ArknightWin32.py 改名),后端正常启动、界面正常,但计划表到点不触发,界面无提示(必现)。
期望
MainTimer.start() 不被前面可选步骤(MCP、活动关卡、清理、适配器、Koishi)的失败连带跳过,各步各自容错;
前端消费 /api/core/health 的 backgroundStatus / backgroundError,failed 时给出可见提示。
出问题的位置
调度中心 / 软件更新
AUTO-MAS 版本
v5.5.0-beta.2(Windows,
D:\Program Files (x86)\AUTO-MAS,非 Runtime 托管)。结构性的那部分 dev 上同样存在。问题描述
点标题栏「更新后端」之后,后端起来了、界面一切正常、手动运行队列也正常,但当晚 00:05 / 02:30 / 04:05 / 06:05 四个定时队列一个都没触发,直到早上手动重启才恢复。日志里 4 次点「更新后端」有 2 次是这样(09-11 07:43、09-13 22:42)。
原因分两层:
尝试恢复后端服务在源码拉取还没结束时就把后端拉起来,撞上copyToRoot()删掉重拷app/的窗口,后台初始化里的懒导入抛ModuleNotFoundError。这条触发路径 fix(ws): 断开不再立即弹窗,两个前端窗口不再互相抢占后端主连接 #547 起已挡住(beta.3+);顺便给 fix(update): 源码部署先删后拷非原子,中断即留下残缺 app/,启动时报 ModuleNotFoundError #544 补一份实证——那里的ModuleNotFoundError至少有一部分就是这个姿势。main.pyinitialize_background_services()(自 优化应用启动流程并提前提供后端就绪状态 #407 起)把 MCP 挂载、活动关卡、清理、ArknightWin32 适配器导入、MainTimer.start()、Koishi 全放在一个try里,前面任何一步抛异常就background_status = "failed"直接结束——定时器排在适配器导入后面,一起没了。/api/core/health虽然回了backgroundStatus: "failed"和backgroundError,但前端没有任何地方消费这两个字段(只在生成的src/api/里出现),用户看不到任何异常。dev54d4e0f的main.py:280-413仍是同一结构。关键日志(09-13):
此后 app.log 直到次日 06:28 重启,没有一条「主业务定时器启动」或「定时唤起任务」。
复现步骤
app/重拷窗口(偶发,4 次里 2 次)。initialize_background_services()里MainTimer.start()之前的任一步抛异常(例如临时把app/MaaFW/ArknightWin32.py改名),后端正常启动、界面正常,但计划表到点不触发,界面无提示(必现)。期望
MainTimer.start()不被前面可选步骤(MCP、活动关卡、清理、适配器、Koishi)的失败连带跳过,各步各自容错;/api/core/health的backgroundStatus/backgroundError,failed时给出可见提示。