乐于分享
好东西不私藏

OpenClaw Gateway开机不自启?实验证明配置是对的,问题在这里

OpenClaw Gateway开机不自启?实验证明配置是对的,问题在这里

🏷️ 文章标签#OpenClaw#launchd#开机自启#踩坑指南#macOS

一、问题现象

我的Mac mini跑着OpenClaw Gateway,作为飞书BOT的后端服务。最近一次系统自动重启后,我发现Gateway没有自动启动——我登录后还得手动敲命令启动服务。

这不对啊。我明明配置了launchd服务,RunAtLoad和KeepAlive都设置了true,应该能自动启动才对。

是配置写错了?还是macOS的问题?我开始排查。

二、第一步:检查现有配置

先看看launchd配置文件有没有问题。我打开终端,检查plist文件:

# 检查文件是否存在 ls -la ~/Library/LaunchAgents/ai.openclaw.gateway.plist # 输出:文件存在,权限正常  # 检查plist语法是否正确 plutil -lint ~/Library/LaunchAgents/ai.openclaw.gateway.plist # 输出:OK

文件存在,语法正确。打开plist文件,找到两个关键配置:

<key>RunAtLoad</key> <true/>  // 加载时立即运行  <key>KeepAlive</key> <true/>  // 进程退出后自动重启

配置看起来是对的。但问题来了:配置是对的,为什么开机后没有自动启动?

三、第二步:分析日志时间线

光看配置不够,我要看看Gateway实际运行情况。打开Gateway日志文件:

tail -100 ~/.openclaw/logs/gateway.log

然后查看系统重启历史:

last reboot | head -3

输出显示:2026-04-10 21:29 系统重启。

时间线是这样的:

时间
事件
21:14
服务正常运行,收到飞书消息
21:29
系统重启
21:30 - 22:00
日志空白(Gateway没有运行)
22:13
服务启动(手动启动)

44分钟空白。系统重启后到22:13这段时间,Gateway完全没有运行。这说明launchd并没有在重启后自动加载并启动服务。

四、第三步:设计验证实验

我怀疑KeepAlive可能没有生效。想验证一下:如果我手动杀掉进程,launchd会不会自动重启?

实验步骤

  1. 记录当前Gateway进程的PID
  2. 用kill -9强制杀掉进程
  3. 等待几秒
  4. 检查进程是否自动重启

开始实验:

# Step 1: 找到当前PID ps aux | grep openclaw-gateway | grep -v grep # 输出:amosliu 2727 ... openclaw-gateway  # Step 2: 强制杀掉进程 kill -9 2727  # Step 3: 等3秒后检查 launchctl list | grep openclaw # 输出:20321  0  ai.openclaw.gateway(新PID)

实验结果:原进程PID 2727被杀掉后,3秒内新进程PID 20321自动启动。KeepAlive配置正常工作!

这就有趣了。实验证明KeepAlive是生效的。那问题出在哪里?

五、根因分析:LaunchAgent的设计限制

答案在这里:

LaunchAgent vs LaunchDaemonLaunchAgent是用户级服务,需要用户登录后才加载LaunchDaemon是系统级服务,开机就启动,无需登录

我的plist文件放在~/Library/LaunchAgents/目录下,这是用户级服务的位置。macOS的设计是这样的:

  1. 系统启动,加载内核
  2. 加载系统级服务(LaunchDaemons)
  3. 等待用户登录
  4. 用户登录后,才加载用户级服务(LaunchAgents)
  5. LaunchAgent被加载后,才启动对应的服务

关键点:LaunchAgent需要用户登录后才加载

如果你的Mac没有设置自动登录,系统重启后会停在登录界面。此时LaunchAgent根本没有被加载,launchd根本不知道有这个服务存在,自然不会启动Gateway。

六、解决方案

知道根因后,解决方案就清晰了。有两种方案:

方案一:设置macOS自动登录(推荐)

这是最简单的方法:

系统设置 → 用户与群组 → 登录选项 → 自动登录 → 选择你的账户

设置后输入账户密码确认。以后重启流程变成:

  1. 系统启动
  2. 自动登录(无需人工干预)
  3. LaunchAgent自动加载
  4. Gateway自动启动

适合场景:Mac mini作为服务器放在家里或办公室,不需要每次手动登录。配合FileVault加密,既方便又安全。

方案二:改用LaunchDaemon(复杂)

如果你的Mac有安全顾虑,不想设置自动登录,可以改用系统级服务:

  • plist文件放到/Library/LaunchDaemons/目录
  • 需要root权限
  • 所有路径配置改用绝对路径

这个方案改动较大,不建议轻易尝试。

七、验证服务状态的常用命令

排查过程中用到的命令:

# 检查服务是否被launchd管理 launchctl list | grep openclaw  # 查看服务详情 launchctl print gui/$(id -u)/ai.openclaw.gateway  # 检查plist语法 plutil -lint ~/Library/LaunchAgents/ai.openclaw.gateway.plist  # 查看Gateway运行日志 tail -f ~/.openclaw/logs/gateway.log  # 查看系统重启历史 last reboot | head -5

八、总结

一句话结论:配置是正确的,问题在macOS设计:LaunchAgent需要用户登录后才加载。解决方案:设置自动登录。

这次排查给我几个教训:

  1. 先验证配置是否正确,不要一上来就怀疑配置写错了
  2. 设计实验验证假设
  3. 缩小问题范围
  4. 理解系统设计

排查问题的思路比结果更有价值。下次遇到类似问题,你可以用同样的方法:验证配置→设计实验→缩小范围→理解系统。


相关文章:

  • OpenClaw配置第二个飞书BOT踩坑指南
  • OpenClaw向量记忆系统部署完整指南
  • OpenClaw技能系统使用指南

—— 爱默如深 · OpenClaw技术系列 ——