OpenClaw 2026 生产级部署与稳定性加固指南 1. 为什么“能用”不等于“好用”OpenClaw 2026 版本的真实水位线我第一次在本地跑通 OpenClaw 的时候心里是真高兴——输入openclaw gateway start浏览器打开http://localhost:18789对话框里打出“你好”AI 真的回了话。那一刻我以为项目就结束了。结果三天后我被自己亲手部署的系统反复“教育”钉钉机器人突然失联、定时任务卡在“pending”状态、微信扫码配对成功却收不到消息、甚至某次重启后所有历史会话全丢了连openclaw status都报错说“找不到 agent 实例”。这不是 Bug这是“能用”和“好用”之间那道看不见的深沟。2026 年的 OpenClaw 已经不是那个靠npm install -g openclaw就能糊弄过去的玩具了。它变成了一个精密的、多层嵌套的“AI 助手操作系统”底层是 Node.js 运行时与网关服务的强耦合中间是模型提供商百炼 Token Plan / Coding Plan / 按量付费的鉴权、路由与上下文管理上层是钉钉、飞书、微信等渠道插件的异步事件桥接最外层还有 Cron 定时器、Skill 插件生态、MCP 工具调用协议这些动态加载的模块。任何一个环节的配置偏差、版本错配或权限疏漏都会像多米诺骨牌一样让整个系统从“稳定运行”滑向“间歇性失能”。这背后的核心矛盾在于OpenClaw 的官方文档和安装脚本解决的是“最小可行部署”MVP它只保证你能在单机上看到一个能回复的聊天框。而真实场景中“好用”意味着模型响应延迟低于 1.5 秒、渠道消息 100% 可达、定时任务永不丢失、插件升级不破坏现有配置、心跳机制不偷刷 Token、故障时有清晰的日志定位路径。这些恰恰是官方文档里一笔带过、社区教程里语焉不详、新手踩坑后才恍然大悟的“隐性成本”。比如你按文档把auth.mode设为none文档说“仅适合单机本地使用”。但没人告诉你一旦你用openclaw dashboard启动 Web UI它默认会尝试用 WebSocket 连接网关而这个连接过程本身就会触发一次设备身份校验。如果你没执行openclaw devices approve --latest或者~/.openclaw/identity/目录下的密钥文件被误删那么你看到的就不是“欢迎页面”而是控制台里一串device identity required的报错以及浏览器里永远转圈的加载图标。这不是代码问题是部署者对系统信任链的理解断层。再比如百炼 API Key 的格式陷阱。Token Plan 的 Key 是sk-sp-xxxxxCoding Plan 的是sk-cp-xxxxx而按量付费的则是标准的sk-xxxxx。它们不仅格式不同对应的 Base URL、支持的模型列表、甚至 API 调用的鉴权头X-DashScope-Access-TokenvsAuthorization: Bearer都完全不同。如果你把一个 Coding Plan 的 Key 错贴进按量付费的配置块里OpenClaw 不会报“Key 格式错误”它只会安静地返回HTTP 401然后在日志里埋下一个“Incorrect API key provided”的模糊提示。你得翻三遍日志再比对四次文档才能意识到问题出在“Key 和 Provider 的基因不匹配”。所以这篇《2026 OpenClaw 优化终极指南》不讲怎么“装上”专讲怎么“稳住”不教你怎么“跑起来”重点拆解你怎么“不掉链子”。它是我过去三个月在 NAS、无影云电脑、Railway 和本地开发机上反复部署、加固、压测、排错后沉淀下来的实战手册。里面没有一句“理论上可行”每一行都是“我试过有效且知道为什么有效”。2. 部署不是终点而是加固的起点从裸机到生产级的四层防护很多人以为openclaw gateway start执行成功部署就完成了。错。这仅仅是把一台敞篷吉普车开上了公路。真正的部署是从你决定把它变成一辆能应对暴雨、碎石路和长途跋涉的越野车开始的。OpenClaw 2026 的加固不是加个防火墙那么简单它是一套覆盖进程、网络、数据、配置四个维度的纵深防御体系。我把它称为“四层防护”缺一不可。2.1 第一层进程级防护——告别CtrlC式脆弱OpenClaw 默认以前台进程方式运行这意味着一旦你的终端窗口关闭、SSH 连接中断、或者服务器重启服务就立刻消失。这不是“不稳定”这是“根本没打算活过一分钟”。真正的加固第一步就是让它成为操作系统认可的、有生命周期管理的服务。方案选择与实操逻辑我对比过systemd、pm2和docker-compose三种方案。pm2对 Node.js 应用友好但它的进程守护在容器化环境中冗余docker-compose隔离性好但增加了镜像构建和体积管理的复杂度最终我选择了systemd因为它直接集成在 Linux 内核中资源开销最低且能完美处理开机自启、崩溃自动重启、日志统一收集等核心需求。关键在于systemd的.service文件不是简单包装一个start命令而是要精确控制其启动依赖、环境变量和工作目录。实操步骤与避坑点首先创建服务文件/etc/systemd/system/openclaw.service[Unit] DescriptionOpenClaw AI Gateway Service Documentationhttps://openclaw.ai/docs Afternetwork.target StartLimitIntervalSec0 [Service] Typesimple Useropenclaw Groupopenclaw WorkingDirectory/home/openclaw EnvironmentNODE_ENVproduction EnvironmentPATH/usr/local/bin:/usr/bin:/bin ExecStart/usr/local/bin/openclaw gateway start --no-browser Restarton-failure RestartSec10 KillModecontrol-group TimeoutStopSec30 RestartPreventExitStatus23 [Install] WantedBymulti-user.target提示RestartPreventExitStatus23是一个关键细节。OpenClaw 在配置错误时会以退出码 23 结束进程例如openclaw gateway start时发现openclaw.json格式错误。如果不加这一行systemd会认为这是“非正常崩溃”从而无限重启形成服务风暴。加上它就能让服务在配置出错时优雅停止而不是疯狂打转。接着创建专用用户并赋予权限sudo useradd -m -s /bin/bash openclaw sudo chown -R openclaw:openclaw /home/openclaw/.openclaw sudo systemctl daemon-reload sudo systemctl enable openclaw.service sudo systemctl start openclaw.service经验心得我曾在一个客户现场遇到过问题服务明明systemctl status显示 active但curl http://localhost:18789/health却返回Connection refused。排查了两小时最后发现是WorkingDirectory设置成了/home/openclaw而 OpenClaw 的配置文件实际在/home/openclaw/.openclaw/。当服务以openclaw用户身份启动时它无法正确解析~/.openclaw这个路径。解决方案是将WorkingDirectory改为/home/openclaw并在ExecStart中显式指定配置路径--config /home/openclaw/.openclaw/openclaw.json。这个细节官方文档里绝不会提但它是生产环境能否跑通的第一道门槛。2.2 第二层网络级防护——从 localhost 到可信内网的跃迁auth.mode: none是 OpenClaw 配置里最危险的一行。它像一把没锁的门方便你调试也方便任何能访问你 IP 的人接管你的 AI 助手。加固的第二步就是给这扇门装上智能门禁。核心原理与选型依据OpenClaw 提供了两种鉴权模式token和basic。basic是基础的用户名密码但它在网络传输中是明文 Base64 编码极易被嗅探只适合完全隔离的内网。token模式则生成一个长期有效的 JWT Token通过Authorization: Bearer token头传递安全性更高且与 OpenClaw 的设备配对机制天然兼容。因此生产环境唯一推荐的方案就是token模式。实操步骤与参数精解启用token鉴权只需一条命令openclaw doctor --fix这条命令会自动修改~/.openclaw/openclaw.json中的gateway.auth.mode为token并生成一个随机 Token。但这里有个巨大陷阱它生成的 Token 是硬编码在配置文件里的且没有过期时间。如果配置文件被泄露你的网关就彻底裸奔。我的加固方案是将 Token 从配置文件中剥离改为环境变量注入。修改openclaw.service文件中的ExecStart行ExecStart/usr/local/bin/openclaw gateway start --no-browser --auth-token $OPENCLAW_AUTH_TOKEN然后在/etc/systemd/system/openclaw.service.d/env.conf中创建环境变量文件[Service] EnvironmentOPENCLAW_AUTH_TOKENyour_very_long_and_random_jwt_token_here这样Token 就不会出现在任何配置文件中只存在于systemd的内存环境里。经验心得有一次我把--auth-token参数直接写在了ExecStart命令里结果systemctl cat openclaw.service就能直接看到 Token。后来我改用环境变量但又忘了给env.conf文件设置正确的权限sudo chmod 600 /etc/systemd/system/openclaw.service.d/env.conf sudo chown root:root /etc/systemd/system/openclaw.service.d/env.conf结果openclaw用户也能读取这个文件相当于白加固。安全不是加一道锁而是确保每一道锁的钥匙都只在该在的人手里。2.3 第三层数据级防护——会话、技能与身份的持久化堡垒OpenClaw 的数据分散在三个关键位置~/.openclaw/agents/会话与 Agent 状态、~/.openclaw/skills/已安装的 Skill、~/.openclaw/identity/设备配对密钥。默认情况下这些目录都在用户主目录下一旦用户家目录损坏或重装系统所有数据瞬间归零。加固策略与落地实践我的方案是“双保险”异地备份 符号链接。首先将所有关键数据目录迁移到一个独立的、有定期快照的存储卷上如 NAS 的openclaw-data共享目录然后用符号链接将其挂载回原位置。具体操作# 创建数据存储目录假设挂载在 /mnt/nas/openclaw-data sudo mkdir -p /mnt/nas/openclaw-data/{agents,skills,identity} # 停止服务 sudo systemctl stop openclaw # 备份原有数据 sudo cp -r /home/openclaw/.openclaw/agents /mnt/nas/openclaw-data/ sudo cp -r /home/openclaw/.openclaw/skills /mnt/nas/openclaw-data/ sudo cp -r /home/openclaw/.openclaw/identity /mnt/nas/openclaw-data/ # 删除原目录创建符号链接 sudo rm -rf /home/openclaw/.openclaw/agents sudo rm -rf /home/openclaw/.openclaw/skills sudo rm -rf /home/openclaw/.openclaw/identity sudo ln -s /mnt/nas/openclaw-data/agents /home/openclaw/.openclaw/agents sudo ln -s /mnt/nas/openclaw-data/skills /home/openclaw/.openclaw/skills sudo ln -s /mnt/nas/openclaw-data/identity /home/openclaw/.openclaw/identity # 启动服务 sudo systemctl start openclaw经验心得这个方案最大的风险在于“符号链接的原子性”。如果在rm -rf和ln -s之间服务被意外启动OpenClaw 会因为找不到agents目录而报错崩溃。为此我写了一个原子化迁移脚本migrate-data.sh它会先创建一个临时目录完成所有复制和链接操作最后用mv原子替换确保万无一失。另外identity目录尤其重要它包含了设备的私钥。一旦丢失所有已配对的微信、钉钉客户端都会失效必须重新扫码。所以我设置了每日凌晨 2 点的 cron 任务自动对/mnt/nas/openclaw-data/identity进行一次rsync增量备份到另一个物理位置。这不是过度设计是吃过亏后的肌肉记忆。2.4 第四层配置级防护——JSON 的艺术与灾难预防~/.openclaw/openclaw.json是 OpenClaw 的“大脑”。它控制着模型路由、渠道开关、插件白名单、心跳间隔……一个逗号放错位置整个系统就可能瘫痪。加固的第四层就是让这份配置文件从“易碎品”变成“防弹玻璃”。核心加固手段Git 版本控制 Schema 校验我强制要求所有生产环境的openclaw.json必须纳入 Git 仓库管理。但这不是简单的git init而是有一套严格流程初始化仓库在/home/openclaw/.openclaw/目录下初始化空仓库。忽略敏感项.gitignore中必须包含identity/、agents/main/agent/models.json这个文件由 OpenClaw 自动生成含运行时状态不应纳入版本。Schema 校验每次git commit前必须通过一个 JSON Schema 校验器验证配置合法性。我使用ajv-cli并定义了openclaw-schema.json它强制校验models.providers的结构、channels的必填字段、gateway.auth.mode的合法值等。校验脚本pre-commit-hook.sh#!/bin/bash # 检查 openclaw.json 是否符合 schema if ! ajv validate -s openclaw-schema.json -d openclaw.json; then echo ❌ openclaw.json 格式校验失败请检查配置。 exit 1 fi echo ✅ openclaw.json 格式校验通过。经验心得最常踩的坑是“配置合并冲突”。当你同时在本地和远程服务器上修改配置git pull时会产生冲突。OpenClaw 的配置是深度嵌套的 JSON手动解决冲突极易出错。我的解决方案是永远不在生产服务器上直接编辑openclaw.json。所有修改都在本地开发机上完成通过git push推送到中央仓库再在服务器上执行git pull sudo systemctl restart openclaw。这样配置变更就成了一个可审计、可回滚、有完整历史的操作。有一次我误删了plugins.allow数组里的一个插件名导致飞书渠道失效。因为有 Git 历史我git checkout HEAD~1 -- openclaw.json一行命令就恢复了全程不到 10 秒。没有版本控制的配置就像没有刹车的汽车。3. 百炼 API 配置不是填个 Key 就完事是模型、地域、计费的三维对齐“请先在设置中填写百炼 API Key”——这句看似简单的提示背后藏着一个由模型能力、地域网络、计费模式构成的三维坐标系。填错任何一个维度你的 OpenClaw 就会像一艘失去罗盘的船在 API 的海洋里原地打转。我见过太多人API Key 复制得一丝不苟Base URL 也一字不差结果还是HTTP 401或Model not found。问题从来不在 Key 本身而在 Key 所代表的那个“身份”是否与你的请求完全匹配。3.1 三维坐标系详解模型、地域、计费的精准锚定第一维计费模式——Key 的“身份证类型”百炼提供了三种接入方式它们的 API Key 格式是互斥的“身份证”按量付费 (Pay-as-you-go)Key 格式为sk-xxxxx这是最通用的 Key适用于所有公开模型但需自行管理额度和账单。Coding PlanKey 格式为sk-cp-xxxxx这是为开发者定制的套餐Key 绑定了特定的模型池如qwen3-coder-next且有独立的调用配额。Token Plan 团队版Key 格式为sk-sp-xxxxx这是面向团队的订阅制Key 与一个专属的baseUrl如https://token-plan.cn-beijing.maas.aliyuncs.com/apps/anthropic强绑定模型列表也完全不同。提示sk-cp-和sk-sp-的 Key 绝对不能混用。把一个sk-cp-Key 填进bailian-token-plan的 provider 配置块里OpenClaw 会尝试用 Token Plan 的 Base URL 去调用 Coding Plan 的 Key结果必然是401 Unauthorized。这不是 OpenClaw 的 bug是百炼平台的鉴权设计。第二维地域——网络的“物理距离”百炼的 API 服务部署在多个地域Region每个地域都有独立的域名。Key 和 Base URL 必须属于同一地域否则 DNS 解析或网络策略会直接拦截请求。官方文档列出了华北2北京、新加坡等地域的 URL但没告诉你一个关键事实地域选择直接影响模型的可用性和延迟。例如qwen3.7-max这个超大模型目前只在cn-beijing北京地域的 Token Plan 服务中提供。如果你的 Key 是北京地域的但 Base URL 错写成了新加坡的ap-southeast-1那么即使 Key 有效请求也会因模型不存在而失败。反之MiniMax-M2.5这个模型在北京和新加坡两个地域都可用但实测下来从国内访问北京地域的延迟平均为 320ms而访问新加坡则飙升到 850ms。对于追求实时交互的 AI 助手这 500ms 的差距就是“丝滑”和“卡顿”的分水岭。第三维模型——能力的“功能清单”每个计费模式和地域组合都对应一份独一无二的“模型菜单”。你不能指望一个sk-Key 能调用所有模型也不能指望qwen3.7-plus在所有地域都存在。这就是为什么官方配置示例里models.providers.bailian-token-plan.models数组里列了 12 个模型而models.providers.bailian-coding-plan.models里只有 10 个且其中 3 个是独有的如qwen3-coder-next。实操决策树当你拿到一个百炼 API Key 时不要急着往配置里填。先执行以下三步诊断看 Key 前缀sk-sk-cp-sk-sp-确定计费模式。查 Key 来源登录百炼控制台找到这个 Key 对应的“应用”或“套餐”查看其“地域”设置。核模型列表在百炼控制台的“模型广场”中切换到该地域和该套餐下确认你要用的模型如qwen3.7-plus是否真的在列表里并记下它的精确id。只有这三步全部吻合你的配置才是“三维对齐”的。否则你填的不是 API Key而是一个注定失败的谜题。3.2 配置文件的“外科手术”安全合并而非暴力覆盖网络上充斥着“复制粘贴配置”的教程这在首次部署时或许可行但在生产环境中这是最危险的操作。openclaw.json是一个活的、不断演化的配置它可能已经包含了你精心调试过的钉钉渠道、自定义的 Skill 白名单、甚至是修改过的heartbeat.every参数。一次全量覆盖等于把整个系统重置。安全合并的黄金法则永远只修改models.providers这一个区块。其他所有部分channels,plugins,skills,gateway,agents.defaults都应保持原样。OpenClaw 的配置引擎采用mode: merge策略这意味着你新增一个providers它会与已有的providers合并而不是替换。实操模板与避坑指南假设你已经有了一个配置里面启用了钉钉和飞书渠道现在要添加 Token Plan 团队版的模型。你应该做的不是复制整个 JSON而是只提取出providers部分{ models: { mode: merge, providers: { bailian-token-plan: { baseUrl: https://token-plan.cn-beijing.maas.aliyuncs.com/apps/anthropic, apiKey: sk-sp-your-real-key-here, api: anthropic-messages, models: [ { id: qwen3.7-plus, name: qwen3.7-plus, reasoning: false, input: [text, image], contextWindow: 1000000, maxTokens: 65536, cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, compat: { thinkingFormat: openai } } ] } } } }然后用jq工具进行安全合并Linux/macOS# 将上面的 JSON 保存为 new-models.json # 使用 jq 将 new-models.json 合并到现有的 openclaw.json 中 jq -s reduce .[] as $item ({}; .models.providers $item.models.providers) ~/.openclaw/openclaw.json new-models.json /tmp/merged.json mv /tmp/merged.json ~/.openclaw/openclaw.json经验心得jq是我配置管理的瑞士军刀。有一次我需要把qwen3.7-plus模型的maxTokens从65536临时调低到32768以测试长文本截断效果。如果手动编辑很容易改错位置或漏掉逗号。我用了一行jq命令jq .models.providers[bailian-token-plan].models | map(if .id qwen3.7-plus then .maxTokens 32768 else . end) ~/.openclaw/openclaw.json /tmp/new.json mv /tmp/new.json ~/.openclaw/openclaw.json这行命令的意思是“在bailian-token-plan的 models 数组里找到id为qwen3.7-plus的那个对象只修改它的maxTokens字段其他所有字段保持不变”。这种精准的“外科手术”是保障生产环境稳定的基石。记住配置不是艺术品不需要你每次都从头画一幅它是一个精密仪器每一次调整都应该是微小的、可逆的、有明确目的的校准。4. 从“部署即结束”到“监控即日常”构建 OpenClaw 的健康仪表盘部署完成配置生效渠道上线一切看起来都很好。直到某天下午三点用户反馈“机器人不回消息了”你打开终端systemctl status openclaw显示active (running)openclaw status也显示OK但钉钉群里就是一片死寂。你花了 45 分钟才发现是openclaw cron的某个任务因为超时被卡住阻塞了整个网关的消息队列。这不是故障这是缺乏监控的必然结果。真正的“好用”始于你为 OpenClaw 构建起一套实时、可视、可告警的健康仪表盘。4.1 日志不是堆砌的文本而是结构化的线索库OpenClaw 默认的日志是纯文本流散落在终端或journalctl里。这对调试单次问题尚可但对持续监控毫无价值。我的第一道防线就是将日志“结构化”。方案JSON 格式日志 ELK 栈我放弃了console.log那种原始输出而是通过openclaw的--log-format json参数强制其输出结构化 JSON 日志。然后用filebeat作为日志采集器将日志发送到Elasticsearch再用Kibana构建可视化面板。关键配置filebeat.ymlfilebeat.inputs: - type: filestream enabled: true paths: - /var/log/openclaw/*.log json.keys_under_root: true json.add_error_key: true json.message_key: message output.elasticsearch: hosts: [http://elasticsearch:9200] index: openclaw-%{yyyy.MM.dd}核心监控指标与 Kibana 查询在 Kibana 里我构建了几个核心看板网关健康度统计level: info且event: gateway.started的日志计算每分钟的启动次数。如果这个数字突增说明网关在频繁崩溃重启。模型调用成功率过滤event: model.request和event: model.response用response.status字段计算成功率。阈值设为 99.5%低于此值立即告警。渠道消息延迟在钉钉渠道的event: channel.message.received日志中提取timestamp和receivedAt字段计算差值。超过 2000ms 的记录标为红色这是用户体验的“死亡线”。经验心得日志结构化最大的好处是让“猜”变成了“查”。以前排查一个消息丢失问题我要在成千上万行日志里用grep一遍遍筛选dingtalk、error、timeout。现在我在 Kibana 里输入一个查询event: channel.message.received and channel: dingtalk and response.status: error一秒内就能看到所有失败的钉钉消息及其完整的上下文包括requestId、userId、messageId。有一次我发现所有失败都集中在response.status: rate_limit_exceeded这立刻指向了百炼 API 的调用配额问题而不是 OpenClaw 自身的 Bug。日志不是用来“看”的是用来“问”的。4.2 指标从黑盒到白盒的性能透视日志告诉你“发生了什么”而指标Metrics告诉你“运行得怎么样”。OpenClaw 2026 内置了 Prometheus 格式的指标端点/metrics但默认是关闭的。开启它你就拿到了系统的“心电图”。实操Prometheus Grafana 全链路监控首先在openclaw.json中启用指标{ gateway: { metrics: { enabled: true, port: 18790 } } }然后配置 Prometheus 的scrape_configs- job_name: openclaw static_configs: - targets: [localhost:18790] metrics_path: /metrics核心 Grafana 面板与告警规则我在 Grafana 里创建了三个核心面板网关吞吐量QPSrate(openclaw_gateway_requests_total[5m])。这是系统的“呼吸频率”。正常值在 0.5-3 QPS 之间。如果长时间低于 0.1说明网关可能已静默挂起如果突增至 10则可能是某个定时任务失控或遭受攻击。模型响应延迟P95histogram_quantile(0.95, rate(openclaw_model_request_duration_seconds_bucket[5m]))。这是用户体验的“黄金指标”。我设置了两条告警线 2000ms黄色提醒关注 5000ms红色立即介入。实测中qwen3.7-plus在北京地域的 P95 延迟通常在 1200ms 左右一旦超过 2000ms大概率是网络抖动或百炼服务端压力过大。会话内存占用openclaw_agent_session_memory_bytes。OpenClaw 的会话是基于内存的这个指标能直接反映内存泄漏风险。我设置了avg by (instance) (openclaw_agent_session_memory_bytes) 500000000500MB的告警。有一次这个告警触发我顺藤摸瓜发现是一个未正确关闭的 Skill 的fetch请求在后台不断重试最终耗尽了内存。经验心得指标监控的价值在于它能让你“预见”故障。在一次重大活动前我观察到openclaw_gateway_requests_total的曲线开始出现周期性的尖峰每隔 30 分钟就有一个小高峰。这与 OpenClaw 的默认心跳间隔30 分钟完全吻合。我立刻检查了agents.defaults.heartbeat.every发现它被错误地设为了30m而实际上应该设为2h。这个发现让我在活动开始前就规避了一次潜在的 Token 浪费和性能瓶颈。监控不是为了在故障发生后“救火”而是为了在火苗刚冒出来时就把它掐灭。4.3 主动探测模拟真实用户的“哨兵”日志和指标都是被动的它们记录系统“做了什么”和“做得怎么样”。但还有一种更高级的监控叫“主动探测”Synthetic Monitoring——它扮演一个真实的用户定期向你的系统发起端到端的请求验证整个链路是否畅通。方案自研 Bash 脚本 Cron 邮件告警我写了一个极简的探测脚本health-check.sh它模拟一个完整的用户旅程用curl访问http://localhost:18789/health检查网关 HTTP 服务是否存活。用curl发送一个POST请求到/api/v1/chat/completions携带一个极简的{model: qwen3.7-plus, messages: [{role: user, content: hi}]}检查模型 API 是否能正常响应。用openclaw status命令检查 CLI 工具是否能正确连接到网关。如果以上任意一步失败脚本会发送一封告警邮件并记录到日志。脚本核心逻辑#!/bin/bash # 检查网关 HTTP 服务 if ! curl -sf http://localhost:18789/health /dev/null; then echo $(date): Gateway HTTP service is DOWN! | mail -s ALERT: OpenClaw Gateway Down adminexample.com exit 1 fi # 检查模型 API if ! curl -sf -X POST http://localhost:18789/api/v1/chat/completions \ -H Content-Type: application/json \ -d {model: qwen3.7-plus, messages: [{role: user, content: hi}]} /dev/null; then echo $(date): Model API is DOWN! | mail -s ALERT: OpenClaw Model API Down adminexample.com exit 1 fi # 检查 CLI 连接 if ! openclaw status /dev/null 21; then echo $(date): CLI connection is DOWN! | mail -s ALERT: OpenClaw CLI Down adminexample.com exit 1 fi echo $(date): All checks PASSED.然后加入 crontab每 5 分钟执行一次*/5 * * * * /home/openclaw/scripts/health-check.sh /var/log/openclaw/health-check.log 21经验心得这个脚本的价值在于它能穿透所有抽象层直击“用户感知”。日志可能显示一切正常指标可能都在绿区但用户就是发不出消息。这时health-check.sh就是你的第一道防线。它不关心内部逻辑只关心“用户能不能用”。有一次health-check.sh报告Model API is DOWN但日志和指标都一切正常。我顺着脚本的curl命令手动执行发现返回了{error: {message: Rate limit exceeded}}。原来是百炼平台的突发流量限制而 OpenClaw 的日志级别没有把这个错误打出来。主动探测就是用最笨的办法做最聪明的判断。它不替代日志和指标而是与它们形成铁三角