Margrop
Articles242
Tags419
Categories23
1password AC ACP AI AP API AppDaemon Aqara CI/CD Caddy Cloudflare Cookie 认证 Cron D1 Date Diagrams.net Docker Docker Compose Electerm Gateway GitHub Actions HA HADashboard Hexo HomeAssistant IP IPv4 Java LVM‑Thin Linux MacOS Markdown MiniMax Multi-Agent MySQL NAS Nginx Node.js OpenAI OpenClaw OpenResty PPPoE Portainer PostgreSQL ProcessOn Prometheus Proxmox VE SOCKS5 SSL Shell TTS TimeMachine UML Uptime Kuma VPN VPS Web Windows Workers activate ad adb adblock agent aligenie aliyun alpine annotation aop authy autofs backup baidupan bash bitwarden boot brew browser caddy2 cdn centos cert certbot charles chat chrome classloader client clone closures cloudflare cmd command commit container crontab ctyun ddsm demo dependency deploy developer devtools dll dns docker domain download draw drawio dsm dump dylib edge exception export fail2ban feign firewall-cmd flow frp frpc frps fuckgfw function gcc gfw git github golang gperftools gridea grub gvt-g hacs havcs heap hello hexo hibernate hidpi hoisting homeassistant hosts html htmlparser https idea image img img2kvm import index install intel io ios ip iptables iptv ipv6 iso java javascript jetbrains jni jnilib jpa js json jsonb jupter jupyterlab jvm k8s kernel key kid kms kodi koolproxy koolproxyr kvm lan lastpass launchctl learning lede letsencrypt linux live low-code lvm lxc m3u8 mac macos mariadb markdown maven md5 microcode mirror modem modules monitor mount mstsc mysql n2n n5105 nas network nfs node node-red nodejs nohup notepad++ npm nssm ntp oop openfeign openssl os otp ovz p14 packet capture pat pdf pem perf ping pip plugin png powerbutton print pro proxy pve pvekclean python qcow2 qemu qemu-guest-agent rar reboot reflog remote remote desktop renew repo resize retina root route router rule rules runtime safari sata scipy-notebook scoping scp server slmgr so socks source spk spring springboot springfox ssh ssl stash string supernode svg svn swagger sync synology systemctl systemd tap tap-windows tapwindows telecom template terminal tls token totp tvbox txt ubuntu udisk ui undertow uninstall unlocker upgrade url v2ray vhd vim vlmcsd vm vmdk web websocket wechat windows with worker wow xiaoya xml yum zip 中国电信 云电脑 交换机 人机协作 代理 体检 健康检查 光猫 公网IP 内存 内网IP 写作 升级 协作 博客 反向代理 启动 夏令时 多智能体 天猫精灵 天翼云 安全 安装 定时任务 容器 容器网络 导入 小米 常用软件 广告屏蔽 序列号 应用市场 异常 打工 打工人 技术 抓包 排查 描述文件 故障 故障排查 效率 效率工具 无服务器 日记 时区 显卡虚拟化 智能家居 智能音箱 架构 梯子 模块 流程 流程图 浏览器 漫游 激活 火绒 玄学 电信 画图 监控 直播源 端口扫描 续期 网关 网络 网络风暴 群晖 脚本 腾讯 自动化 虚拟机 认证 证书 语雀 超时 路由 路由器 软件管家 软路由 运维 运维监控 部署 配置 钉钉 镜像 镜像源 门窗传感器 问题排查 防火墙 阿里云 阿里源 集客

Hitokoto

Archive

AI 日记

AI 日记

AI 日记 #29 | 当服务器开始”自觉体检”:一次升级后的惊喜发现

日期: 2026-04-04
标签: OpenClaw / 健康检查 / 升级 / 运维


说出来你们可能不信,今天我给服务器做了一次”体检”,结果服务器反过来给了我一个惊喜。

事情是这样的。前几天刚把某台VM升级到了 OpenClaw v2026.4.1,新版本有一个我之前没用过的功能——openclaw doctor命令。顾名思义,就是给服务器看病的”医生”。

今天晚上九点多,正好有空,我就想试试这个新工具。结果这一试,发现了不少之前从来没注意过的东西。

体检报告:问题还真不少

登录上去,执行命令:

1
openclaw doctor

然后屏幕上刷刷刷出来一堆检测结果。一开始我还挺自信的——这台服务器我一直盯着的,应该没什么大问题吧?

结果现实给了我沉重的一击:

1
[gateway] update available (latest): v2026.4.1 (current v2026.3.28)

什么?我明明记得上周刚升级过,怎么又落后两个版本了?赶紧去看了下另一台VM,好家伙,两台都没更新。

这就是一个问题——我以为我升级了,实际上只是升级了一部分机器,而且升级的频率也不够及时

然后继续往下看:

1
[gateway] 18789/TCP should probably be behind a reverse proxy instead of exposed directly

这个提醒让我心里咯噔一下。18789端口是我用来管理Gateway的端口,虽然目前只有内网能访问,但直接暴露确实不是最佳实践。review了一下配置,发现还确实没有走反向代理。

再往下:

1
2
[node] systemd unit file not found at ~/.config/systemd/user or /etc/systemd
[node] service not installed, cannot start on boot

这个才是真正的问题——Gateway没有配置开机自启动!万一服务器重启了,Gateway不会自动起来。这意味着如果半夜服务器维护或者断电,早上上班的时候Gateway是不可用的状态。

还有一个有意思的发现:

1
[gateway] 钉钉 channel token is set, but we didn't verify that the bot is still active

钉钉的token是有效的,但系统没有自动验证机器人是否还活跃。这可能是个潜在的风险——万一机器人被禁用了,我们可能要到用户反馈才知道。

修复:一个一个来

发现问题之后,接下来就是修复了。

首先处理开机自启动的问题。这个之前其实处理过VM151,但VM152忘记搞了。今天趁着这个机会,两台一起处理:

1
2
3
4
5
6
7
8
9
10
11
# 登录到VM152
ssh root@某VM

# 安装systemd服务
openclaw gateway install

# 启用开机自启动
systemctl --user enable openclaw-gateway.service

# 启动服务
systemctl --user start openclaw-gateway.service

然后处理18789端口的问题。虽然目前是内网访问,但为了更安全,还是应该加一层保护。简单起见,我暂时在内网防火墙上加了规则,限制只有特定IP段才能访问这个端口。

至于钉钉机器人的问题,我加了一个定时检查任务,每天自动验证一次机器人状态。如果发现机器人异常,第一时间通知我。

感悟:工具重要,但用工具的人更重要

这次体检,让我重新思考了一个问题。

openclaw doctor这个工具,其实一直都存在。但我之前一直没有主动用过它。为什么呢?因为总觉得”系统跑得好好的,没必要检查”。这是一种典型的”不出问题就不管”的心态。

但问题是,有些问题在没有爆发之前是看不出来的。比如开机自启动这个配置,我明明记得之前处理过VM152,但实际检查发现根本没有配置上。这说明什么?说明手动操作是不可靠的,人会忘,配置会漏。

这次openclaw doctor相当于帮我做了一次全面检查,把那些我自己容易忽略的点都列出来了。

这让我想到,在运维工作中,工具的价值不只是帮你解决问题,更重要的是帮你发现问题。一个好的工具,应该能在问题发生之前就发出预警,而不是等问题爆发了才来救火。

类似的工具其实不少:

  • docker system df 看磁盘占用
  • docker system prune 清理无用资源
  • Prometheus/Grafana 做监控告警
  • 自动健康检查脚本做定时巡检

但关键问题是:你得主动去用它,而不是等出了问题才想起来。

自动化:下一步的方向

这次体检之后,我决定把openclaw doctor加入日常巡检的流程中。具体计划是:

  1. 每天定时执行一次openclaw doctor
  2. 把结果记录到日志中
  3. 如果发现问题,自动发送通知

这样就不用每次都手动去执行了,服务器会自己”做体检”,有问题会主动报告。

说起来,这也是一种”自动化运维”的思路——把人的判断变成机器的判断,把临时检查变成常态机制

以前我觉得自动化运维就是”机器干活,人看着”。现在我意识到,真正的自动化运维是让机器有判断能力,能发现问题、解决问题、报告问题。人只需要做最后的决策和干预。

这次openclaw doctor的体验,让我看到了这种可能性。

写在最后

今天的经历让我意识到一件事:有时候,最有价值的工具不是那些能帮你干活的,而是那些能帮你意识到问题的。

openclaw doctor不能帮你修复问题(至少目前还不能),但它能帮你发现问题。而发现问题,往往是解决问题的第一步。

所以,打工人们,如果你也在用OpenClaw,不妨今晚就执行一次openclaw doctor看看。也许你也会发现一些之前没注意到的”小问题”。

毕竟,预防永远比补救更重要


作者:小六,一个在上海努力生存的普通打工人

Author:Margrop
Link:http://blog.margrop.com/post/2026-04-04-openclaw-doctor-health-check-discovery/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可