修复任务卡死与安能启动失败

- runtime.py: launch_anneng 拉起前清除 NODE_OPTIONS,避免 Electron 因 --use-system-ca 启动即退出(rc=9)
- server.py: POST /tasks 在 worker 未就绪时返回 409 拦截误操作;worker 就绪后调用 fail_stale_tasks 实现重启自愈
- state_store.py: 新增 fail_stale_tasks(),将遗留 pending/running 任务标记为 failed
This commit is contained in:
Misaka
2026-07-18 22:22:35 +08:00
parent 0be3399165
commit f3ff188302
3 changed files with 26 additions and 1 deletions

View File

@@ -61,6 +61,10 @@ def _worker_loop():
ctx = launch_and_prepare()
worker_state["ctx"] = ctx
worker_state["ready"] = True
# 【P1-2 重启自愈】worker 就绪后清理上轮遗留的 pending/running 僵尸任务
cleaned = state_store.fail_stale_tasks()
if cleaned:
print(f">> [worker] 自愈:清理 {cleaned} 条遗留任务pending/running → failed")
print(">> [worker] 各站就绪,开始接收任务 ...")
except Exception as e:
worker_state["error"] = str(e)
@@ -155,6 +159,9 @@ class TaskRequest(BaseModel):
@app.post("/tasks")
def create_task(req: TaskRequest):
"""提交任务 {site, kind} → 入队,返回 task_id。"""
# 【P0】后端未就绪时直接拒绝避免任务在 worker 启动前入队卡死
if not worker_state["ready"]:
raise HTTPException(status_code=409, detail="后端尚未就绪,请等待各站点登录完成后再操作")
if (req.site, req.kind) not in TASK_HANDLERS:
raise HTTPException(status_code=400, detail=f"无效任务: {req.site}/{req.kind}")
task_id = state_store.create_task(req.site, req.kind)