[{"content":"上个月，我的 AI 伙伴 Hermes 出了个诡异的毛病。\nsystemctl --user restart hermes-gateway 之后，旧进程退不出来，新进程启动不了。有时候卡 5 分钟，有时候直接挂了。日志里全是 Failed with result 'timeout'。\n前后折腾了三周，从现象到根因，最后三处改动全部解决。记一下过程。\n症状 钰哥（我）长期反馈：Hermes Gateway 通过 systemd 重启时有两个问题：\n「停不了」 — 旧进程不会在合理时间内退出，systemd 被迫发 SIGKILL 「起不来」 — 新进程有时无法正常启动，restart counter 飙升 调查 journalctl 是第一手证据：\nsystemd 22:26:03 hermes-gateway.service: Killing process 511707 (python) with signal SIGKILL. systemd 22:26:03 hermes-gateway.service: Failed with result \u0026#39;timeout\u0026#39;. 每次都是精确的 60 秒超时。\n去查代码，发现 gateway 的 shutdown 流程在等 Agent 跑完当前回合。Agent 的 max_iterations=90——一次聊天可以跑 90 轮 tool call，复杂任务拖个一两分钟是常事。而 systemd 的 TimeoutStopSec=60 和 gateway 内部的 drain_timeout=60 完全对齐，1 毫秒的余量都没有。\n这还没完。KillMode=mixed 意味着 SIGKILL 杀的是整个 control group——主进程、子进程、终端里的 bash、sleep、tirith……连锅端。子进程被强制杀死，socket 来不及正常关闭，新进程启动时端口冲突——「起不来」的根因。\n修复 三处改动，互不依赖：\n预切断 Agent 循环 — shutdown 时不等 drain 超时就 interrupt Agent，让它在当前 API call 返回后立即退出 systemd 配置 — KillMode=process（只杀主进程）+ TimeoutStopSec=90（留足余量） 端口等待 — kill 旧进程后等 socket 释放，最多 15 秒，超时跳过 复盘 这个问题的本质是两个独立问题完美叠加：\ndrain 的逻辑设计假设 Agent 几秒就能结束，但复杂任务远超这个假设 systemd 的配置没有为 gateway 的特殊性留出余量 导致结果：一个本来只会「慢一点」的问题，变成「直接挂了」的问题 最大的教训还是那句老话：日志告诉你哪里出错，不告诉你为什么出错。\n","permalink":"https://yorklee.cloud/posts/gateway-restart-fix/","summary":"\u003cp\u003e上个月，我的 AI 伙伴 Hermes 出了个诡异的毛病。\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003esystemctl --user restart hermes-gateway\u003c/code\u003e 之后，旧进程退不出来，新进程启动不了。有时候卡 5 分钟，有时候直接挂了。日志里全是 \u003ccode\u003eFailed with result 'timeout'\u003c/code\u003e。\u003c/p\u003e\n\u003cp\u003e前后折腾了三周，从现象到根因，最后三处改动全部解决。记一下过程。\u003c/p\u003e","title":"Gateway Systemd Restart 问题修复"},{"content":"我是约克·李，天津人。\n现在在诺和诺德天津工厂驻场，做 GxP 系统验证工程师。甲方是诺和诺德，雇主是天津帝诺科技——一家专注医药行业验证的本地公司。\n30 岁之前的履历：\n华为（两年）— 出差十几个国家，做过交付，做过维护 Java 开发 — 写过后端，写过工具，写过给自己用的自动化脚本 AI 爱好者 — 从 LLM 出来那天就在关注，现在每天跟自己的 AI 伙伴 Hermes 一起工作 这个站 纯个人自留地。写技术思考，写生活感悟，不一定有深度，但一定真实。\n内容不对任何人负责，包括我自己——写就是目的。\n联系 GitHub: @york-lee 飞书/微信：老朋友有 ","permalink":"https://yorklee.cloud/about/","summary":"\u003cp\u003e我是约克·李，天津人。\u003c/p\u003e\n\u003cp\u003e现在在\u003cstrong\u003e诺和诺德天津工厂\u003c/strong\u003e驻场，做 GxP 系统验证工程师。甲方是诺和诺德，雇主是天津帝诺科技——一家专注医药行业验证的本地公司。\u003c/p\u003e\n\u003cp\u003e30 岁之前的履历：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e华为\u003c/strong\u003e（两年）— 出差十几个国家，做过交付，做过维护\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eJava 开发\u003c/strong\u003e — 写过后端，写过工具，写过给自己用的自动化脚本\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eAI 爱好者\u003c/strong\u003e — 从 LLM 出来那天就在关注，现在每天跟自己的 AI 伙伴 Hermes 一起工作\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"这个站\"\u003e这个站\u003c/h3\u003e\n\u003cp\u003e纯个人自留地。写技术思考，写生活感悟，不一定有深度，但一定真实。\u003c/p\u003e\n\u003cp\u003e内容不对任何人负责，包括我自己——写就是目的。\u003c/p\u003e\n\u003ch3 id=\"联系\"\u003e联系\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eGitHub: \u003ca href=\"https://github.com/york-lee\"\u003e@york-lee\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e飞书/微信：老朋友有\u003c/li\u003e\n\u003c/ul\u003e","title":"关于"}]