AI / 自动化
2026年4月7日
OpenClaw 环境变量与 API 密钥在云 Mac 上 2026:launchd 与交互 Shell
MacXCode 技术团队
2026年4月7日
约 11 分钟阅读
在租赁的 Mac mini M4 上跑 OpenClaw,常见两种现实:工程师 ssh 登录后在 .zshrc 里 export 密钥,网关一切正常;而开机自启的 launchd LaunchAgent 却拿不到这些导出。2026 年上游补充了 openclaw env 类子命令与对 ~/.openclaw/.env 的更清晰说明,但若 plist 与 dotenv 各写一套,仍会出现 token_missing 死循环。本文梳理优先级、对齐守护进程与 Shell,并串联 Docker 与原生 npm、定时与 launchd、网关排错。
为什么 SSH「有密钥」而 launchd「没有」
- 非登录守护进程 — LaunchAgent 环境极简,不会执行你的交互 shell 配置。
- 双源真相 — 把变量同时写进 XML 的
EnvironmentVariables与~/.openclaw/.env,升级后极易漂移。 - 密钥解析边界 — 强制重装网关时若把解析后的密钥写进 plist,应触发安全复盘,而非当作偶发噪音。
原则:为供应商地址与 API 密钥选定唯一文档化来源(通常为
~/.openclaw/.env 并由 CLI 管理);LaunchAgent plist 保持精简,必要时只保留用户、工作目录或明确的 OPENCLAW_HOME。
优先级速查(前者可覆盖后者,依运行时而定)
| 来源 | 典型用途 | 注意 |
|---|---|---|
| 父进程环境 | 前台手动跑、CI 包装 | 重启后不保留 |
~/.openclaw/.env | 网关守护进程 + CLI 对齐 | 文件权限与轮换纪律 |
openclaw.json 中 env | 与配置并列的结构化项 | 勿进公开仓库 |
LaunchAgent EnvironmentVariables | 开机固定路径 | 若与 .env 重复,可能意外覆盖 |
用 openclaw env 代替手改 plist
若你安装的版本提供该子命令,推荐:
openclaw env set ANTHROPIC_BASE_URL=https://proxy.internal
openclaw env list
openclaw env path
修改后按 安装与部署指南 中的方式重启网关,并发一次入队烟测。
生产环境仍常见的 plist 坑
- 陈旧 plist 获胜 — 旧的
EnvironmentVariables会盖住已更新的.env,直到有人发现模型 endpoint 不一致。 - 明文惊吓 — 绝不要把含在线 API 密钥的 plist 提交到工单附件。
- PATH 过短 — 守护进程常缺 Homebrew 路径;脚本里用绝对路径,或在 plist 中有意设置一次 PATH。
宣布「环境已修好」前的七步
- 确认运行形态:前台、LaunchAgent,或 Docker 挂载。
- 从网关日志确认有效配置路径(截图勿带密钥)。
- 把密钥收敛到
~/.openclaw/.env或 CLI 管理存储。 - 删掉 plist 里不必要的重复键。
- 重启守护进程;按 网关排错 验证
18789行为。 - 在不做手动 export 的新 SSH 会话里再测一遍 —— 证明与守护进程一致。
- 把优先级写进内部 Wiki,方便值班同事接手。
常见问题
| 问题 | 简答 |
|---|---|
| 密钥能进 Git 吗? | 不能 — 使用私有配置与文件系统 ACL;泄露即轮换。 |
| Docker 会简化环境吗? | 可以,通过 compose env_file,但仍需一致挂载 ~/.openclaw。 |
| 24/7 网关主机哪里租? | 见 定价(港/日/韩/新/美)与 帮助 的 SSH 说明。 |
为何专用 Apple Silicon 适合常驻 Agent
OpenClaw 网关是长进程:空闲功耗、稳定网卡与可预期文件系统,比瞬时 CPU 更重要。物理 Mac mini M4 减少意外休眠与「邻居干扰」,与 定时任务指南 中的要求一致。MacXCode 节点可放在靠近你的 Git 与模型 API 的区域。