OpenClaw 更新后的启动和配置指南

OpenClaw 更新后的启动和配置指南

本文档是《小型服务器更新 OpenClaw 完整指南》的补充,记录更新完成后启动服务时遇到的问题和解决方案。

  • 前置条件
  • 问题一:内存溢出导致无法启动
  • 问题二:Gateway 服务配置过期
  • 问题三:systemd 服务管理
  • 问题四:远程访问配置
  • 问题五:API 密钥配置
  • 完整的启动流程

在开始之前,确保你已经:

  1. ✅ 完成了 OpenClaw 的更新(参考《小型服务器更新 OpenClaw 完整指南》)
  2. ✅ OpenClaw 已安装在 /opt/openclaw/node_modules/openclaw/
  3. ✅ 创建了启动脚本 /usr/local/bin/openclaw
  4. ✅ 可以执行 openclaw --version 并看到版本号

直接运行 openclaw 命令时出现以下错误:

[root@server ~]# openclaw <--- Last few GCs ---> [63589:0x6c4c000] 53443 ms: Mark-Compact 508.2 (514.4) -> 506.7 (514.9) MB [63589:0x6c4c000] 54812 ms: Mark-Compact 508.8 (514.9) -> 508.0 (519.7) MB FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory

Node.js 默认的内存限制(通常 512MB-1GB)不足以支撑 OpenClaw 的运行。OpenClaw 在启动时需要:

  • 加载大量的依赖模块
  • 初始化 node-llama-cpp 的 C++ 绑定
  • 加载配置和插件系统

在 2GB 内存的小型服务器上,默认限制会导致内存溢出。

NODE_OPTIONS="--max-old-space-size=1536" openclaw

这个命令只对当前执行有效,关闭终端后失效。

创建一个包装脚本来自动设置内存限制:

# 1. 删除旧的软链接 rm /usr/local/bin/openclaw # 2. 创建包装脚本 cat > /usr/local/bin/openclaw <<'EOF' #!/bin/bash export NODE_OPTIONS="--max-old-space-size=1536" exec node /opt/openclaw/node_modules/openclaw/openclaw.mjs "$@" EOF # 3. 赋予执行权限 chmod +x /usr/local/bin/openclaw # 4. 验证 openclaw --version

脚本说明

  • NODE_OPTIONS="--max-old-space-size=1536":设置 Node.js 堆内存上限为 1.5GB
  • exec node ...:执行 OpenClaw 主程序
  • "$@":传递所有命令行参数(如 openclaw gateway run

内存分配建议

服务器内存 推荐设置 说明
2GB 1536MB 为系统保留约 300MB
4GB 3072MB 为系统保留约 1GB
8GB+ 6144MB 可以更高,但通常不需要
[root@server ~]# openclaw --version 2026.1.30

如果能正常显示版本号,说明内存问题已解决。


运行 openclaw gateway run 时出现错误:

[root@server ~]# openclaw gateway run 03:36:01 Gateway failed to start: gateway already running (pid 66708); lock timeout after 5000ms If the gateway is supervised, stop it with: openclaw gateway stop 03:36:01 Port 18789 is already in use. 03:36:01 Gateway service appears enabled. Stop it first. 03:36:01 Tip: openclaw gateway stop 03:36:01 Or: systemctl --user stop openclaw-gateway.service

当你手动更新 OpenClaw 时(通过打包传输方式),systemd 服务配置文件仍然指向旧版本的路径和配置:

  1. 路径错误:服务配置指向 /usr/lib/node_modules/openclaw,但实际安装在 /opt/openclaw
  2. 版本不匹配:服务配置中的版本号还是旧版本(如 1.29)
  3. 缺少内存限制:旧配置没有设置 NODE_OPTIONS
# 尝试正常停止 openclaw gateway stop # 如果无法停止,查找进程并强制终止 ps aux | grep openclaw kill <进程ID>
# 卸载旧服务配置 openclaw gateway uninstall # 重新安装(会自动生成新的 systemd 配置) openclaw gateway install

openclaw gateway install 做了什么

  1. ~/.config/systemd/user/ 创建 openclaw-gateway.service 文件
  2. 自动检测当前 OpenClaw 的安装路径
  3. 配置服务的启动命令、环境变量、重启策略
  4. 启用开机自启动

安装后的服务配置默认不包含内存限制,需要手动添加:

# 编辑服务配置文件 nano ~/.config/systemd/user/openclaw-gateway.service

[Service] 段中,找到 Environment=OPENCLAW_GATEWAY_PORT=18789 这一行,在它之前添加:

Environment="NODE_OPTIONS=--max-old-space-size=1536"

完整的 [Service] 段应该类似:

[Service] ExecStart=/usr/bin/node /opt/openclaw/node_modules/openclaw/dist/index.js gateway --port 18789 Restart=always RestartSec=5 KillMode=process Environment=HOME=/root Environment="PATH=/root/.local/share/pnpm:/root/.local/bin:/usr/local/bin:/usr/bin:/bin" Environment="NODE_OPTIONS=--max-old-space-size=1536" Environment=OPENCLAW_GATEWAY_PORT=18789 Environment=OPENCLAW_GATEWAY_TOKEN=你的token Environment="OPENCLAW_SYSTEMD_UNIT=openclaw-gateway.service" Environment=OPENCLAW_SERVICE_MARKER=openclaw Environment=OPENCLAW_SERVICE_KIND=gateway Environment=OPENCLAW_SERVICE_VERSION=2026.1.30

或者使用 sed 命令快速添加

sed -i '/Environment=OPENCLAW_GATEWAY_PORT/i Environment="NODE_OPTIONS=--max-old-space-size=1536"' \ ~/.config/systemd/user/openclaw-gateway.service
# 重载 systemd 配置 systemctl --user daemon-reload # 启动 Gateway 服务 openclaw gateway start # 检查服务状态 openclaw gateway status

成功启动后应该看到:

[root@server ~]# openclaw gateway status 🦞 OpenClaw 2026.1.30 (76b5208) Gateway service: running (PID 70485) Port: 18789 Uptime: 2m 15s

OpenClaw Gateway 使用 systemd 作为服务管理器,提供以下功能:

[Service] Restart=always RestartSec=5

说明

  • Restart=always:无论什么原因退出(崩溃、被杀、正常退出)都会自动重启
  • RestartSec=5:崩溃后等待 5 秒再重启,防止疯狂重启消耗资源

测试自动恢复

# 查看当前进程 ID openclaw gateway status # 强制杀死进程 kill -9 <PID> # 等待 5 秒后再次检查 sleep 6 openclaw gateway status # 应该看到新的 PID,说明服务已自动恢复
[Install] WantedBy=default.target

检查是否启用

systemctl --user is-enabled openclaw-gateway.service # openclaw 输出:enabled

手动启用/禁用

# 启用开机自启 systemctl --user enable openclaw-gateway.service # 禁用开机自启 systemctl --user disable openclaw-gateway.service
# 启动服务 openclaw gateway start # 或 systemctl --user start openclaw-gateway.service # 停止服务 openclaw gateway stop # 或 systemctl --user stop openclaw-gateway.service # 重启服务 openclaw gateway restart # 或 systemctl --user restart openclaw-gateway.service # 查看状态 openclaw gateway status # 或 systemctl --user status openclaw-gateway.service # 查看日志 journalctl --user -u openclaw-gateway.service -f
~/.config/systemd/user/openclaw-gateway.service

查看完整配置

cat ~/.config/systemd/user/openclaw-gateway.service
# 查看详细错误日志 journalctl --user -u openclaw-gateway.service -n 50
# 修改配置文件后必须重载 systemctl --user daemon-reload # 然后重启服务 openclaw gateway restart
# 查看失败原因 systemctl --user status openclaw-gateway.service # 重置失败状态 systemctl --user reset-failed openclaw-gateway.service # 重新启动 openclaw gateway start

在浏览器中访问 http://服务器IP:18789 时出现:

ERR_CONNECTION_REFUSED 或 ERR_CONNECTION_RESET

OpenClaw Gateway 默认绑定在 127.0.0.1(本地回环地址),只允许本机访问。这是出于安全考虑的设计。

验证绑定地址

ss -tlnp | grep 18789 # 输出:LISTEN 0 511 127.0.0.1:18789 0.0.0.0:*

如果看到 127.0.0.1:18789,说明只绑定了本地地址。

有两种方式访问远程服务器上的 Gateway:

在本地电脑上执行以下命令:

ssh -N -L 18789:127.0.0.1:18789 root@<服务器公网IP>

命令说明

  • -N:不执行远程命令,只建立隧道
  • -L 18789:127.0.0.1:18789:将本地 18789 端口转发到服务器的 127.0.0.1:18789
  • root@<服务器公网IP>:SSH 连接信息

使用步骤

  1. 在本地终端执行上述命令(保持终端打开)
  2. 在本地浏览器打开: http://localhost:18789/?token=你的token

优点

  • ✅ 安全:流量通过 SSH 加密
  • ✅ 无需修改防火墙
  • ✅ 无需暴露端口到公网

缺点

  • ❌ 需要保持 SSH 连接
  • ❌ 每次访问前需要建立隧道

警告:此方法会将 Gateway 暴露到公网,存在安全风险。建议配合防火墙和强密码使用。

步骤 1:修改配置文件

nano ~/.openclaw/openclaw.json

找到 gateway 配置段,修改 bind 字段:

{ "gateway": { "port": 18789, "bind": "0.0.0.0", // 改为 0.0.0.0 "token": "你的token" } }

步骤 2:配置防火墙

# 如果使用 firewalld firewall-cmd --permanent --add-port=18789/tcp firewall-cmd --reload # 如果使用 iptables iptables -A INPUT -p tcp --dport 18789 -j ACCEPT service iptables save # 阿里云/腾讯云:还需要在控制台的安全组中开放 18789 端口

步骤 3:重启 Gateway

openclaw gateway restart

步骤 4:验证绑定

ss -tlnp | grep 18789 # 输出:LISTEN 0 511 0.0.0.0:18789 0.0.0.0:*

现在可以通过公网 IP 访问:

http://<服务器公网IP>:18789/?token=你的token

安全建议

  • 使用强随机 token(OpenClaw 默认生成的 token 已经足够强)
  • 定期更换 token
  • 配置防火墙只允许特定 IP 访问
  • 考虑使用 Nginx 反向代理 + HTTPS

Gateway 启动后,日志中出现以下错误:

03:27:04 [diagnostic] lane task error: lane=main durationMs=34 error="FailoverError: No API key found for provider "anthropic". Auth store: /root/.openclaw/agents/main/agent/auth-profiles.json" 03:27:04 [llm-slug-generator] Failed to generate slug: FailoverError: No API key found for provider "anthropic"

OpenClaw 的某些内部功能(如 session-memory hook 的 slug 生成器)默认使用 Anthropic 的 claude-opus-4-5 模型。如果你没有配置 Anthropic API 密钥,这些功能会失败。

好消息:这个错误不会阻止 Gateway 运行。系统会使用回退方案(如时间戳 slug)。

如果你有 Anthropic API 密钥:

openclaw auth add anthropic

按提示输入 API 密钥。

验证配置

cat ~/.openclaw/agents/main/agent/auth-profiles.json

应该看到 anthropic 配置:

{ "anthropic": { "apiKey": "sk-ant-..." } }

如果你暂时不需要 slug 生成功能,可以忽略这个错误。系统会自动使用时间戳作为 slug:

03:27:04 [session-memory] Generated slug: null 03:27:04 [session-memory] Using fallback timestamp slug: 0327 03:27:04 [session-memory] Generated filename: 2026-02-01-0327.md

查看已配置的提供商

cat ~/.openclaw/agents/main/agent/auth-profiles.json | jq 'keys'

删除 API 密钥

openclaw auth remove anthropic

更新 API 密钥

openclaw auth add anthropic # 会覆盖旧密钥

# 1. 验证安装 openclaw --version # 2. 初始化配置(如果是首次使用) openclaw onboard # 3. 卸载旧的 Gateway 服务配置 openclaw gateway uninstall # 4. 重新安装 Gateway 服务 openclaw gateway install # 5. 添加内存限制到服务配置 sed -i '/Environment=OPENCLAW_GATEWAY_PORT/i Environment="NODE_OPTIONS=--max-old-space-size=1536"' \ ~/.config/systemd/user/openclaw-gateway.service # 6. 重载 systemd 配置 systemctl --user daemon-reload # 7. 启动 Gateway openclaw gateway start # 8. 检查状态 openclaw gateway status # 9. 查看日志(可选) journalctl --user -u openclaw-gateway.service -f
# 启动 Gateway openclaw gateway start # 停止 Gateway openclaw gateway stop # 重启 Gateway openclaw gateway restart # 查看状态 openclaw gateway status

在本地电脑上

# 建立 SSH 隧道 ssh -N -L 18789:127.0.0.1:18789 root@<服务器IP>

在本地浏览器中打开:

http://localhost:18789/?token=你的token

检查清单

  • [ ] openclaw --version 显示正确版本
  • [ ] openclaw gateway status 显示 “running”
  • [ ] 端口 18789 正在监听:ss -tlnp | grep 18789
  • [ ] 服务已启用开机自启:systemctl --user is-enabled openclaw-gateway.service 输出 “enabled”
  • [ ] 可以通过浏览器访问 Control UI
  • [ ] 日志中没有严重错误:journalctl --user -u openclaw-gateway.service -n 50

症状openclaw gateway start 后立即退出

排查步骤

# 1. 查看详细日志 journalctl --user -u openclaw-gateway.service -n 100 # 2. 检查端口是否被占用 ss -tlnp | grep 18789 # 3. 手动运行 Gateway(查看实时输出) openclaw gateway run # 4. 检查配置文件 cat ~/.openclaw/openclaw.json cat ~/.config/systemd/user/openclaw-gateway.service

症状:日志中出现 “JavaScript heap out of memory”

解决

# 检查是否设置了内存限制 grep "NODE_OPTIONS" ~/.config/systemd/user/openclaw-gateway.service # 如果没有,添加内存限制 sed -i '/Environment=OPENCLAW_GATEWAY_PORT/i Environment="NODE_OPTIONS=--max-old-space-size=1536"' \ ~/.config/systemd/user/openclaw-gateway.service # 重载并重启 systemctl --user daemon-reload openclaw gateway restart

症状:浏览器显示 “无法连接” 或 “连接被拒绝”

排查步骤

# 1. 确认 Gateway 正在运行 openclaw gateway status # 2. 确认端口正在监听 ss -tlnp | grep 18789 # 3. 检查绑定地址 # 如果输出是 127.0.0.1:18789,需要使用 SSH 隧道 # 如果输出是 0.0.0.0:18789,可以直接访问 # 4. 检查防火墙(如果绑定到 0.0.0.0) firewall-cmd --list-ports # 或 iptables -L -n | grep 18789 # 5. 检查阿里云/腾讯云安全组 # 需要在控制台开放 18789 端口

症状openclaw gateway status 显示 uptime 很短,不断重启

排查步骤

# 查看重启原因 journalctl --user -u openclaw-gateway.service -n 200 | grep -E "error|Error|ERROR|failed|Failed" # 常见原因: # 1. 内存不足 → 增加内存限制 # 2. 配置错误 → 检查 ~/.openclaw/openclaw.json # 3. API 密钥无效 → 重新配置 API 密钥 # 4. 端口冲突 → 更换端口或停止冲突进程

  1. 内存限制是必须的:小型服务器必须设置 NODE_OPTIONS="--max-old-space-size=1536"
  2. 更新后重新安装服务:手动更新后必须运行 openclaw gateway install 更新 systemd 配置
  3. 使用 systemd 管理服务:不要手动运行 openclaw gateway run,使用 openclaw gateway start
  4. SSH 隧道是最安全的访问方式:避免将 Gateway 直接暴露到公网
  5. API 密钥错误可以忽略:如果不影响核心功能,可以暂时忽略 slug 生成器的错误
  • 小型服务器更新 OpenClaw 完整指南 – 如何编译和部署
  • OpenClaw 官方文档 – 官方使用指南
  • systemd 用户服务 – systemd 用户服务详解

文档版本:1.0 最后更新:2026-02-01 适用版本:OpenClaw 2026.1.30+ 测试环境:Alibaba Cloud Linux 3 + 2GB 内存


祝你使用愉快!如有问题,请参考故障排查章节或查阅官方文档。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:Ai探索者,转载请注明出处:https://javaforall.net/254437.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月13日 下午1:06
下一篇 2026年3月13日 下午1:07


相关推荐

关注全栈程序员社区公众号