2026 OpenClaw 换机迁移与冷启动 Runbook:从拷贝目录到 Gateway 首次联通(systemd 与 launchd 清单)

~/.openclaw 与工作区整棵拷到新机器后,常见症状是 openclaw 找不到、Gateway 起不来或通道「已配对但无响应」。本文按介质→环境→服务→通道分层,给 systemd 与 launchd 对照、七步冷启动顺序、可抄的快检命令,并与站内《安装路径对照》《status→doctor 阶梯》互补。

OpenClaw 换机后在新 Mac 云或 Linux 上完成 Gateway 冷启动与首次联通的示意图

本文要点

1. 痛点拆解:拷贝≠可运行

换机时最容易产生的错觉是「目录一样就应该行为一样」。实际上 OpenClaw 同时依赖安装介质(哪条 openclawPATH 最前)、用户态配置树~/.openclaw)、工作区常驻服务的启动上下文。缺任一层都会在冷启动阶段表现为随机:有时 SSH 里手动能跑、断线或重启后又不起来。

  1. CLI 入口漂移:旧机用 npm -g、新机只有 install.sh 或反之,PATH 未继承时直接 command not found;拷贝配置并不能自动带来同一套二进制。若团队曾混用 pnpm 源码目录与全局包,还会出现「版本字符串一致但动态链接路径不同」的隐性分叉。
  2. daemon 上下文断裂:Linux 上习惯 systemd --userEnvironment=HOME;macOS 上 launchd 若不显式设 WorkingDirectoryPATH,Gateway 会以意外 cwd 启动,日志写错盘或读不到密钥。企业镜像里常见的「登录 shell 才注入的 nvm/pnpm 前缀」在 plist 里默认不存在,必须在单元里写死或用薄封装脚本导出环境。
  3. 冷启动顺序错误:未校验 openclaw.json 与 18789 就去做通道 pairing,会误判为「通道坏了」;应先确认本机 Gateway 探针再查上游。否则你会在聊天侧反复解绑、重扫二维码,而根因只是本机监听地址绑在 127.0.0.1 却从另一网段来探。
  4. 卷与属主在迁移后错位rsync 若以 root 拉树再切回业务用户,可能出现「配置可读、日志目录不可写」的半失败:进程活着但不落诊断信息,排障时间被拉长。

2. systemd 与 launchd:环境差异对照表

下表用于 Runbook 附件;列「第一站」指迁移后本机侧应先核对的项,与通道文档区分。跨平台团队建议把「服务定义文件」与「安装介质决策」放在同一变更单里评审:否则极易出现「单元照抄、环境未对齐」的无效迁移。

若目标机是 Mac 云且计划长期在线,优先在 launchd 层把绝对路径固定日志文件写清,再讨论是否要 Docker 分区;反过来,在 Linux VPS 上若已用 systemd --user 管其他代理进程,可把 OpenClaw Gateway 与用户级 slice 一并纳入资源上限策略,避免与构建机争用 CPU 时拖垮响应。

维度Linux(systemd 用户单元)macOS(launchd LaunchAgent)迁移第一站
环境变量Environment= 块或 drop-inplist 无继承 shell;需写死或 wrapper核对 HOMEPATH 与 API Key 注入方式
工作目录WorkingDirectory=WorkingDirectory与 workspace 根一致,避免相对路径密钥
日志journalctl --user -uStandardOutPath / StandardErrorPath先确认文件属主可写
开机拉起enable --userRunAtLoad + bootstrap 域重启后验收一次「非 SSH 子进程」
权限模型uid/gid + 可选 cgroup沙箱与 Full Disk Access 视工具链钥匙串/文件隐私权限单独测

3. 七步冷启动:从目录到首次联通

七步刻意把「人眼能确认的输出」放在前,把「需要外部账号配合」的动作放在后,减少无效往返。演练时建议两人:一人改单元文件,一人只读 tail 日志,避免同时改配置与看通道。若夜间割接,把每步预计耗时写进窗口公告,便于值班长判断是继续还是回滚。

  1. 冻结版本与介质:记录旧机 openclaw --version、安装方式(npm / pnpm / 脚本 / 镜像 digest);新机先按《安装路径对照》选定唯一入口,避免双二进制。若必须升级大版本,先在 staging 节点跑一遍 doctor 全绿再迁生产树。
  2. 同步目录树rsync -aH 或等价方式拷贝 ~/.openclaw 与工作区;排除缓存大目录若团队有规范;校验属主为运行服务的用户。同步后立刻做一次只读校验:关键文件 mtime 与大小是否与旧机摘要一致,防止传输中断被忽略。
  3. 权限与密钥可达ls -la ~/.openclaw;若用容器,核对卷映射与 uid,参见安装文 Docker 节。任何「宿主机工具链读容器内生成配置」的反模式都应在 Runbook 里标红禁止。
  4. 写服务单元:Linux 用 systemd --user unit 写明 Environment;macOS 写 LaunchAgent plist,ProgramArguments绝对路径指向 openclaw。单元内建议显式写出监听地址与端口变量,避免默认值在版本间变化。
  5. 加载并冷启systemctl --user daemon-reload && restartlaunchctl bootstrap + kickstart;确认进程父进程为 systemd/launchd。若仍看到 SSH 会话为父进程,说明未真正常驻化。
  6. 本机探针lsof -i :18789、最小 JSON 校验、openclaw doctor 按阶梯执行;异常时对照《status→doctor》。探针未绿前不要动通道侧 token,以免把账号状态搅乱。
  7. 通道烟测:Gateway 正常后再做 pairing 或重连;把每步命令与输出片段记入变更单备审计。烟测通过后再开自动重启策略与监控探针,避免「告警先于稳定」。

快检命令块(可贴 Runbook)which openclawopenclaw --versiontest -r ~/.openclaw/openclaw.json && echo ok;本机 HTTP/WS 探针按团队规范(如 curl 到绑定地址)。全绿再打开通道侧文档。若机器在公司代理后,再加一条从服务用户(非你个人 SSH 用户)执行的出口探测,避免「人能 curl、daemon 不能」的假阴性。

4. 可引用技术信息:路径、端口与审计字段

本节可直接贴进内部 wiki 的「附录」;与正文七步的关系是:正文讲顺序,本节列不得遗漏的检查项证据字段,方便事后复盘。

5. FAQ

Q:只拷了 workspace,没拷 ~/.openclaw,Gateway 能起来吗?
通常不能完整复现状态;至少缺密钥与本地状态。应两卷同迁或按文档重建密钥再配对。若必须重建,先在只读窗口导出旧机敏感字段清单,避免手工抄错。

Q:launchctl 显示已加载但端口未监听?
StandardErrorPathWorkingDirectory、plist 内 PATH;再用 openclaw doctor 看 schema 与绑定地址。若错误日志为空,怀疑是否写到无权限路径导致静默失败。

Q:Linux 迁 macOS 后 systemd 单元能直接用吗?
不能;需改写成 LaunchAgent,并重做环境变量与日志路径验收。可把原 unit 的环境块逐行映射到 plist,避免遗漏。

Q:通道无响应但本机 18789 正常?
分层:先确认 Gateway 日志无报错,再查上游网络与白名单;勿先重置全部配置。若近期改过绑定 IP,优先核对防火墙与监听地址是否一致。

Q:同一台机器上想保留旧实例做对照?
务必错端口与错 Label,并在 Runbook 写清「对照实例不得写生产配置」。否则易出现双写同一 JSON 的灾难。

6. 从试用到生产:为什么原生 Mac 云更省事

换机 Runbook 的变量数与「能否 SSH 到与线上一致的宿主」强相关。笔记本与嵌套虚拟化会放大 PATH、卷与权限差;在专用 Mac 云上按 launchd 固化与安装文对齐,最容易把冷启动写成可审计步骤。需要隔离时再引入 Docker 分区,而不是在首迁混用多条安装路径。

对要把 OpenClaw 当「长期在线能力」的团队,建议把 Mac 云当成与生产构建同级的受管资产:磁盘分区、日志轮转、登录审计与节点标签一并纳入,而不是把 Gateway 当成个人开发机上的临时进程。这样换机时只需重复同一套 plist 与目录约定,而不是每人一套偏方。