教训:启动服务前先检查是否已运行

问题

重复启动已经在运行的服务(agentmemory / iii engine),浪费时间和资源。

发生时间

2026-07-16

场景

Mano 在配置 agentmemory 时,没有先检查 iii 引擎是否已在运行 (~/.agentmemory/worker.pid=14708, port 3111 livez=200), 直接用 iii -c iii-config.yaml 启动了第二个实例,导致双进程争锁。

正确做法

启动任何长期服务前,必须先做三项检查:

  1. PID 文件 — cat ~/.agentmemory/worker.pid(或其他已知路径)
  2. 健康检查 — curl http://${LOCALIP}:<port>/<service>/livez
  3. 环境变量 — 检查 III_REST_PORT、AGENTMEMORY_URL 等配置的端口

适用范围

本规则适用于所有 Agent 的所有长期服务: agentmemory、gbrain、netmon、humon、g4f 等。 不要假设服务没在跑,先验证再启动。

2026-10-09 Codex 审阅说明

PID 文件可陈旧或被复用;启动前应结合进程命令、所属 unit/cgroup、监听者身份与服务响应确认,不能只用 kill -0 或一次 HTTP 200 判定目标服务。此处为操作原则,本次未启动、停止或探测服务。