Margrop
Articles388
Tags939
Categories7

Categories

/health 200 /v1/models 0.025s 0步 0步主动 0步元递归 0步本身 12类 18789 18天idle 18天静默 192.168.x.x 1password 2.3s 21天 22类一键汇总 3层定位法 3行修复 3行修改 401 4个Gateway 4个Gateway全军覆没 4天滞后 4步主动 4步定位 4源 4源交叉 503 5步定位法 5步排查 5步验证 6.2.0 6.24 release 6.28 发现 60秒延迟 60秒超时 6个host 6个节点 6节点 AC ACP AI AI Coding Assistant AI编程助手 AI辅助 AI辅助编程 ALLHEALTHY AP API API 改动 ActiveState Agent couldn't generate Alertmanager AppDaemon Aqara BaiduPCS CC-Switch CI/CD CLI Tools CLI工具 CONFIG Caddy Chrome缺失 Claude Code Cloudflare Codex Cookie 认证 Cron D1 DB探针 DB静止 DIY-123模型 DIY-MINI DIY平台 Date Diagrams.net Diary Docker Docker Compose EADDRINUSE EasyTier NAT穿透 Efficiency Tools Electerm English FTS5 Gateway Gemini CLI GitHub Actions HA HADashboard HTTP 200 Hermes Hexo HomeAssistant IP IPv4 Invalid model Java LVM‑Thin Library/Logs Linux MacMini MacOS Macmini Macmini log路径 Markdown MiniMax MiniMax-M3 Multi-Agent MySQL NAS NRestarts Nginx Node-RED Node.js OOM OpenAI OpenClaw OpenClaw gateway OpenCode OpenResty OpenWrt P1P3 PPID PPID=1 PPID=796 PPPoE PVE PVE245 Portainer PostgreSQL ProcessOn Prometheus Proxmox VE RPC Restart=always Restart=always循环 SOCKS5 SPOF SQLite SSL Session Shell Subagent TTS TimeMachine Type=notify UML Uptime Kuma VM VM151 VM152 WeCom缺失 VM153 VM154 VPN VPS VPS4 VPS4 overlay TCP不可达 WeCom Web WebSocket Windows Workers activate ad adb adblock agent alerting aligenie aliyun alpine annotation aop argv authy auto-restart autofs backup baidupan baidupcs baidupcs-sync-progress baidupcs静默 bash bash subprocess bitwarden boot breaking change brew browser by-design caddy2 capture_output cdn centos cert certbot charles chat chat completion chat completions chrome classloader client clone closures cloudflare cmd command commit connected container cron crontab cron任务 cron设计 cross-verification ctyun curl custom/DIY-123 daemon-reload dashboard ddsm demo dependency deploy deprecation developer devtools dll dns docker domain download draw drawio dsm dual supervision dump duplicate service unit dylib edge exception existing gateway is healthy exit 78 exit code exit78 export fail2ban fallback fallback失效 false negative false positive feign feishu告警 firewall-cmd flow frp frpc frps fuckgfw function fuser gateway gateway.log gcc gfw git gitea github golang google_gemma-4 gperftools grep gridea grub gvt-g hacs havcs health check health-check-all heap hello hexo hibernate hidpi hoisting homeassistant hosts html htmlparser https iKuai idea idle-detection idle_hours image img img2kvm immortalwrt import index install intel io ios ip iptables iptv ipv6 iso java javascript jetbrains jieba jni jnilib journald journald日志漂移 jpa js json jsonb jupter jupyterlab jvm k8s kernel key kid kill orphan kms kodi koolproxy koolproxyr kvm lan lastpass launchctl learning lede letsencrypt linux live log path log rotate loopback-proxy low-code lsof lsof -p lvm lxc m3u8 mac macOS macOS app macos manual mariadb markdown maven md5 meta-acceptance meta-pattern meta-probe microcode mirror misjudgment model live test model provider modem modules monitor mount mstsc multisource mysql n2n n5105 nas netstat network new-api nfs node node-red nodejs nohup notepad++ npm nssm ntp one-api oop openclaw openclaw/ openfeign openssl orphan process orphan进程 os otp ovz p14 packet capture pat pdf pem perf ping ping通但chat不通 pip plugin png port bind race port=18789 powerbutton print pro probe process check process detection provider/model proxy ps ps -axo args ps -eo args ps+grep pve pvekclean python python subprocess qcow2 qemu qemu-guest-agent qmshutdown rar reboot reconnect循环 reflog release notes remote remote desktop renew repo resize retina root route router rule rules running runtime safari sata schema schema列名 scipy-notebook scoping scp self-blind self-leak self-reference server server is busy service不可信 single point of failure single source single-instance slmgr so socket-proxyd socks source spk split边界 spring springboot springfox sqlite3 CLI ss ss -tlnp ssh ssl stale stash stderr/stdout stderr被吞 stdout/stderr string subprocess supernode supervisor svg svn swagger sync synology system-level daemon system-level vs user-level system-level与user-level抢端口 systemctl systemctl --user systemctl --user disable systemctl daemon-reload systemctl disable systemctl is-active systemctl restart systemctl show systemd systemd --user systemd duplicate service systemd exit 78 systemd restart loop systemd service unit systemd unit systemd unit race systemd user instance systemd-socket systemd-user双重监管 systemd被覆盖 tap tap-windows tapwindows telecom template terminal tls tmux token token失效 totp transient 999 trigram tvbox txt ubuntu udisk ui undertow unicode61 unified logging uninstall unlocker upgrade upstream provider timeout uptimeMs url user-level daemon v1 API v10探针 v11探针 v12探针 v13探针 v14 v15探针 v1探针 v2 API v2ray v6探针 v7探针 v8探针 vhd vim vlmcsd vm vmdk web websocket wechat windows with work day 14 work day 15 work day 17 work day 2 worker wow xiaoya xml yum zip 一行修改 一键idle告警脚本 一键告警脚本 一键解决方案 上海 上海晴 上游LLM容量 不动 不干预 不是我的锅 中国电信 中文搜索 主动0步 主动0步本身 主动不修 主动不追问 主动不追问本身 主动不追问本身也是清单之外 主动不通知 主动不通知本身 主动修 主动修system-level本身也是清单之外 主动修本身也是清单之外 主动反思 主动周一 主动意识到 主动意识到0步本身 主动意识到0步本身也是清单之外 主动排查 主动追问 主动通知 云电脑 交叉验证 交换机 人机协作 代理 伏笔 优化 但chat 30s+ 但是我的事 体检 保护逻辑本身也是清单之外 修systemd-user本身 修复方案 修挖坑闭环 修正本身 修正递归 值班 假阳 假阳性 假阴 健康检查 健康检查探针 元递归 光猫 全HEALTHY 全员HEALTHY 全绿 全量同步 公网IP 内存 内存优化 内网 内网IP 内网渗透 写作 分词 切换 列名误判 升级 协作 单位混淆 博客 又是周五 双重监管 反向代理 反向探针 反常健康 反常稳定 反常稳定本身 反应 vs 知识 反着来 启动 告警 告警优化 周一 周一焦虑 周三 周二 周二晚上 周二青岛后周三 周五 周五晚上 周六 周六晚上 周四 周四晚上 周报 周日 周日山崎 周日山崎后周一 周日晚上 周末 周末也是修坑日 周末也是清单之外 周末修坑 周末本身也是清单之外 周末突破 周末第二天 周末第五天 周末落地 周末落地本身 夏令时 多场景 多智能体 多源验证 多节点 多节点管理 天猫精灵 天翼云 孤儿进程 安全 安装 定时任务 容器 容器网络 导入 小米 山崎 山崎之夜 工作感悟 工作日 工作日常 工作日第三天 工作日第五天 工作日第四天 已通知用户 常用软件 幂等 广告屏蔽 序列号 应用市场 异常 弃用 循环类 心态 心智成长 心理模型 心跳 心跳检查 性能优化 性能最快 感悟 打工 打工人 打工人的克制 打工人的反讽 打工人的无奈 打工人的自指 批量校验 技术 抓包 挖坑→修坑闭环 排查 排查思路 排查流程 探针 探针再升级 探针本身 探针版本 探针管理 探针自检 探针踩坑 接受 接受之后 接受修 接受修正 接受层 接受挖坑 接受本身 接受递归 描述文件 放下 故障 故障排查 效率 效率工具 数据 旁路由 旁路进程 无服务器 日志路径 日记 时区 显卡虚拟化 智能家居 智能音箱 服务器 服务管理 架构 梯子 模块 模型别名映射 模型探测 模型端点可达性 模型端点能ping通 模型调用 死循环 毫秒 流程 流程图 流程管理 浏览器 清单之后 清单之外 清单之外也包括接受本身 清单的元递归 清单设计 清单边界 清单进化 源码备份 漫游 激活 激活循环 火绒 焦虑 玄学 生活 用户主动 用户关机 电信 画图 监控 监控系统 直播源 直觉 磁盘 端口 端口 LISTEN 端口冲突 端口占用 端口扫描 第10天 第10类 第11天 第11类 第12天 第12类 第13天 第13类 第14天 第14类 第15类 第16天 第16类 第17个青岛 第17类 第18天 第18类 第19天 第19类 第20天 第20类 第21天 第21类 第22天 第22类 第23天 第23类 第24天 第25类 第26类 第27类 第28类 第29类 第30类 第31类 第32类 第4个山崎 第4次复发 第6天 第7天 第8天 第9天 第9类 管理 续期 网关 网络 网络风暴 群晖 脚本 脚本优化 腾讯 自动化 自动恢复 自定义模型 自建应用 自我反思 自我发现 自我打脸 自我盲区 自指 自检撞自检 自检本身 自检脚本 节点角色 虚拟机 被动意识到 角色不匹配 角色误判 角色误配 角色错配 认证 设计偏差 证书 语雀 误判 误报 误报过滤 超时 路由 路由器 软件管家 软路由 运维 运维监控 进程 进程探测 连接保活 连接问题 通信机制 通知 通知元递归 通知挖坑 通知本身 部署 部署链路 配置 配置落后 重启不写日志 钉钉 镜像 镜像源 长期稳定 长期静默 长连接 门窗传感器 问题排查 防火墙 阿里云 阿里源 集客 青岛 静默期 飞书 飞书告警

Hitokoto

Archive

星期四晚上9点,我给服务器做了一次"全身体检"

星期四晚上9点,我给服务器做了一次"全身体检"

星期四晚上9点,我给服务器做了一次”全身体检”

周四晚上九点,大部分人已经在刷手机准备洗洗睡了。而我,一个普通的服务器运维打工人,正坐在电脑前,打开了一个叫做 openclaw doctor 的命令。

你没看错,是”doctor”。给服务器看病的那种。

说起来,今天其实是个很普通的工作日。早上到公司,处理了几封邮件,看了一眼监控系统——绿色的,全部是绿色的。没有告警,没有突发状况,平静得像湖面一样。

按理说这种日子应该很开心才对。但作为一个被服务器”坑”过太多次的打工人,我的心里始终有一个声音:太顺利了,是不是在憋什么大招?

那个红色的数字,引起了我的注意

下午的时候,我习惯性地看了一眼 Gateway 的状态。然后发现了一行很有意思的输出:

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

翻译成人话就是:你的 Gateway 有一个新版本,但你还没更新。

说实话,看到这个的时候,我的心情挺复杂的。一方面,新版本意味着新功能,说不定还有些 bug 被修了;另一方面,作为过来人,我太知道”更新”这两个字意味着什么了——搞不好更新完服务起不来,一晚上就没了。

但是不更新也不行。旧版本迟早会被淘汰,而且新版本通常有安全修复。

我在心里默默记下:今晚要处理这件事。

九点,终于轮到服务器”体检”了

吃完晚饭,哄完小孩(没有小孩,是猫),九点整,我打开了终端。

作为一个有一定”职业病”的运维,我每次登录服务器之后都会做一套固定的动作:看状态、看日志、看资源。久而久之,这套流程已经变成了肌肉记忆。

但今天,我决定做一件更系统的事情:给服务器做一次全面体检。用的是 openclaw doctor

这个命令我之前也用过,但从来没有认真看过它的全部输出。今天趁着新版本发布的契机,我想看看这个”医生”到底能查出些什么。

第一项:启动优化建议

医生一上来就给了一个”生活方式建议”:

1
2
3
4
5
6
7
◇  Startup optimization ────────────────────────────────

- NODE_COMPILE_CACHE is not set; repeated CLI runs can be slower
- OPENCLAW_NO_RESPAWN is not set to 1
- Suggested env for low-power hosts:
export NODE_COMPILE_CACHE=/var/tmp/openclaw-compile-cache
export OPENCLAW_NO_RESPAWN=1

说实话,看完这个我愣了一下。这两条我都不知道是啥意思。

第一条 NODE_COMPILE_CACHE,大概是说 Node.js 重复运行的时候,如果没有设置这个缓存,每次都要重新编译,速度会慢。这个我理解,适用于树莓派之类的低性能设备。我这台服务器虽然不算强,但也不算弱,应该还好。

第二条 OPENCLAW_NO_RESPAWN,这个”不要自我重启”的标志,我猜测是说 Gateway 遇到问题的时候不要反复自我恢复,免得消耗资源。这倒是个合理的建议,尤其是当问题比较严重、反复重启也没用的时候。

这一项属于”预防保健”,没有急迫性,但值得记下来。

第二项:一个被沉默掉的飞书频道

1
2
3
4
5
◇  Doctor warnings ─────────────────────────────────────

- channels.feishu.groupPolicy is "allowlist" but
groupAllowFrom is emptyall group messages will be
silently dropped.

这一项引起了我的警觉。

翻译一下:飞书频道的消息策略是”白名单”模式,也就是说只有白名单里的人发的消息才会被处理。但问题是——白名单是空的。这意味着所有群消息都被静默丢弃了

静默丢弃。这个词听起来就让人后背发凉。

什么意思呢?假设你在飞书群里配置了一个 Bot,期望它能响应群里某些人的指令。但因为 groupAllowFrom 没配置,所有消息都被 Bot 无声无息地忽略了——Bot 不会报错,不会提醒,只是默默地不看这些消息。

这有点像你家有一个安保系统,摄像头都开着,但监控室的人睡着了,你也不知道。

为什么这件事之前没发现?因为 Bot 不会主动报错。你以为它在工作,实际上它什么都没看到。

这条必须立刻修复。

第三项:四个”孤儿”文件

1
2
3
4
5
6
7
◇  State integrity ────────────────────────────────────

- Found 4 orphan transcript files in
~/.openclaw/agents/main/sessions.
These .jsonl files are no longer referenced by
sessions.json, so they are not part of any active
session history.

这句话有点技术,但我尽量解释清楚。

Gateway 运行的时候,会把对话历史保存在一种叫做 transcript 的文件里(格式是 .jsonl)。这些文件正常情况下会被 sessions.json 索引和引用。但有些时候——比如会话异常中断、或者手动删除了一些记录——会出现一些”没有人要”的文件。

它们躺在文件夹里,占着磁盘空间,但已经完全没人管了。

这有点像你家里堆的那些快递盒子——箱子还在,但你已经不记得里面装的是什么了,而且它也不影响你生活,就是碍眼。

四个孤儿文件,不算多,但积累久了也会变成问题。清理一下是好的。

第四项:一个安全警告

1
2
3
4
5
Security ────────────────────────────────────────────

- WARNING: Gateway bound to "lan" (0.0.0.0)
(network-accessible).
Ensure your auth credentials are strong and not exposed.

这条是最让我心里咯噔一下的。

Gateway 绑定到 0.0.0.0 意味着什么?意味着这台服务器在网络上是可以被访问的。只要知道 IP 地址和端口,理论上任何人都能尝试连接。

当然,连接需要认证凭据。但”需要凭据”和”安全”之间,还有一个很大的距离。

弱密码、有漏洞的认证流程、泄露的 Token……这些都是可能的攻击面。医生给的建议是:

  1. 确保认证凭据足够强
  2. 或者把 Gateway 绑定改回 loopback(只允许本机访问),然后通过 Tailscale 等工具做安全远程访问

这个建议我之前也看到过,但一直没有认真处理。今天被医生点名了,心里又多了一份紧迫感。

体检结束:需要行动的结论

整个体检大概花了五分钟。结论是这样的:

  • 需要立刻处理:飞书频道静默丢弃问题
  • 需要近期处理:安全绑定问题、孤儿文件清理
  • 可以缓一缓:启动优化建议

说实话,这份报告比我预期的要”丰富”。我原本以为服务器跑得好好的,应该没什么大问题。结果医生一查,小问题还真不少。

这大概就是运维的常态:没查的时候觉得一切正常,一查全是问题。

区别只在于,有些问题会造成直接故障,有些问题只是”潜在风险”。但作为打工人,我们都知道,潜在风险如果不及时处理,迟早会变成直接故障。

这次体检给我的一点感悟

说起来,今天这次体检让我想起了自己每年的公司体检。

每年公司组织体检,我都是忐忑不安地去,忐忑不安地等报告。拿到报告之后,最怕看到的不是某个指标异常,而是”建议复查”四个字——因为那意味着我要再去一次医院,再等一轮报告,再接受一次心理折磨。

但话说回来,体检本身就是一件好事。发现问题总比没发现问题好。早发现总比晚发现好。

服务器也一样。

openclaw doctor 就是服务器的体检工具。平时你看不到问题,不代表没有问题;服务正常运行,不代表所有配置都正确。有些问题藏在水面下,平时不露头,但一旦发作起来,就是要命的那种。

所以,定期体检,很重要。

明天的待办清单

体检完了,接下来就是”遵医嘱”了。

我给自己列了一个简单的清单:

  1. 先把飞书频道的 groupAllowFrom 配上,避免消息继续被静默丢弃
  2. 检查 Gateway 的认证凭据,确保没有泄露风险
  3. 清理那四个孤儿 transcript 文件
  4. 考虑把 Gateway 绑定改为更安全的模式
  5. 找时间把新版本升了

这份清单不算重,但每一条都有点紧迫感。尤其是飞书频道那条——你能想象一个 Bot 在群里,但它假装没看见你发的消息吗?

写在最后

周四晚上十点半,我终于从服务器上退了出来。

今天的”体检”花了我大概一个半小时,比预期要久。主要是因为有些问题需要查文档、有些需要想清楚再动手。但总体来说,这一个半小时花得很值。

古人云:上医治未病,中医治欲病,下医治已病。

对于服务器来说,也是同样的道理。提前发现问题,比等它炸了再救火,要轻松得多。

不过,话说回来,打工人都知道,理想是理想,现实是现实。大部分时候,我们都在”已病”和”欲病”之间反复横跳——不是不想预防,是预防需要时间,而时间永远不够用。

但今天,我至少做了一次完整的体检,也算给自己交了一份还算及格的答卷。

明天继续干活。服务器还在跑,我也要继续跑。


作者:小六,一个周四晚上还在给服务器看病的普通打工人

Author:Margrop
Link:http://blog.margrop.com/post/2026-04-02-servers-doctors-and-late-night-revelations/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可