Margrop
Articles209
Tags389
Categories23
1password AC AI AP API AppDaemon Aqara Caddy Cookie 认证 Cron Date Diagrams.net Docker HA HADashboard HomeAssistant IP IPv4 Java LVM‑Thin Linux MacOS Markdown MiniMax MySQL NAS Nginx OpenAI OpenClaw OpenResty PPPoE PostgreSQL ProcessOn Prometheus Proxmox VE SOCKS5 SSL Shell TTS TimeMachine UML Uptime Kuma VPN VPS Web Windows 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 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 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

凌晨4点,我的手机响了——论打工人的生物钟是如何被服务器驯服的

凌晨4点,我的手机响了——论打工人的生物钟是如何被服务器驯服的

凌晨4点,我的手机响了——论打工人的生物钟是如何被服务器驯服的

凌晨4点01分,大部分人还在梦乡里,而我已经被手机震醒了。

不是噩梦,不是闹钟,是——钉钉告警。

我迷迷糊糊地摸起手机,眯着眼睛看了一眼:”某VPS服务器健康检查完成,Gateway状态:正常。”

然后翻了个身,继续睡。

这是我每天早上的第一件事。不是刷牙洗脸,不是伸懒腰,而是——确认完服务器还活着,再决定要不要起床。

你们以为运维工程师是朝九晚六?太天真了。

早起的鸟儿和它的健康检查

说起来你们可能不信,我的作息已经被服务器驯服了。

每天早上4点01分,自动健康检查任务会跑一遍。我设置了三个检查时间点:4点、5点、早上7点多。为什么这么密集?因为某VPS服务器有时候会莫名其妙地”发呆”——服务进程都在,但就是不响应。等你发现的时候,可能已经过了好几个小时。

这种事发生一次,你就学会多设几个检查点了。

今天的检查结果:所有容器都在线,Gateway健康,Swap使用938Mi/1Gi,稍微有点高,但问题不大。钉钉也没有报错,一片祥和。

松了一口气,顺手把手机放回床头,继续眯一会儿。

5点01分,Codex Token 检查

5点01分,第二次健康检查。这次顺带检查了一下Codex Token的状态。

Codex Token是什么?简单来说就是我用MiniMax API的”通行证”。这个Token是有有效期的,过期了就得续。续费的时候要登录官网操作,虽然不复杂,但总不能等到”不能用了”才发现吧。

所以我也设置了定时检查:每天5点01分自动验证一次Token状态,确保”一切正常”。

今天的检查结果:✅ Token状态正常。

嗯,可以安心起床了。

早上7点48分,第三次检查

7点48分,第三次检查。

这个时候其实我已经到公司了,或者在去公司的路上。现在的我已经养成了一个”条件反射”:出门前先看一眼手机,确认没有钉钉告警,再出门。

没有告警,就是最好的消息。

今天的检查结果:Gateway还是健康的,容器都在线。没什么大问题。

好,今天的开局不错。

上午:安全学习时间

到了公司,惯例性地检查了一遍各节点状态。VM151(某VM)、VM152(某VM)、某VPS……一切正常。

趁着上午脑子清醒,干点有技术含量的事吧——继续之前没完成的安全学习课程。

今天的内容是:容器环境安全检查

说实话,在这次学习之前,我从来没想过容器里的”安全”还能有这么多门道。以前觉得:容器嘛,跑起来不就行了?什么环境变量、文件权限、临时文件,这些有什么好管的?

结果一学才发现,这些恰恰是最容易被忽略、但最容易出问题的点

第一课:环境变量安全

容器运行时,有些环境变量里可能藏着敏感信息——密码、API密钥、Token之类的。如果这些被泄露出去,轻则账号被盗,重则数据泄露。

今天学到了一招:在容器里执行 env 命令,查看所有环境变量,特别关注是否有明文密码、密钥、Token

我在某VPS上跑了一遍这个检查。结果:0个敏感环境变量。✅

好,这次是安全的。但不代表以后每次都安全,所以要定期检查。

第二课:文件权限检查

容器的 /app 目录是存放应用文件的地方。如果权限设置得太宽松,比如所有人都能读写,那恶意用户就能修改你的应用文件,往里面塞后门。

检查了一下某VPS的 /app 目录权限:drwxr-xr-x(755),即所有者可读可写可执行,组可读可执行,其他人可读可执行。

✅ 权限设置正常。

第三课:临时文件安全

容器里有一个 /tmp/openclaw 目录,用来存放临时文件。临时文件如果权限不对,别人就能偷看你的敏感数据。

检查了一下权限:700,即只有所有者能访问。✅

这个很重要。很多时候我们只关注主目录的安全,却忽略了临时文件目录。但攻击者可不管你哪里重要,人家专门挑你不注意的地方下手。

小结

容器环境的安全,远没有我们想象的那么简单。不是”容器能跑就完事了”,而是需要定期检查、定期维护。就像你家的门锁,不是装好了就一劳永逸,还得时不时检查一下锁芯有没有老化、钥匙有没有被人复制。

中午:反思一下

中午吃完饭,坐在工位上发了会儿呆。

想起最近的安全学习,发现自己以前对”容器安全”的理解太肤浅了。以前总觉得:容器不是有隔离吗?不是有Namespace和cgroups吗?还能出什么问题?

后来才发现,容器安全是多层防护的概念。硬件层面、系统层面、容器运行时层面、应用层面……每一层都有可能被攻破。

而作为运维工程师,我们能做的,就是把每一层都尽量做好。不要等到出事了才后悔没做安全加固。

下午:继续学习之路

下午没什么紧急的事,继续安全学习。

今天的容器环境安全三板斧学完了,下一课是:日志审计基础

日志审计是什么?简单来说就是”看日志”。但不是随便看看,而是有目的、有方法地看——通过日志发现异常行为、追踪安全问题、分析故障原因。

说起来容易,做起来难。很多时候日志里密密麻麻的信息,新手根本不知道哪些是重要的、哪些是可以忽略的。

下一课的目标就是学会区分这些。

晚上:今日总结

终于熬到了下班点。回头看看今天的工作:

  1. 凌晨4点、5点、早上7点:完成三波健康检查,一切正常 ✅
  2. 上午:容器环境安全学习,完成环境变量、文件权限、临时文件三项检查 ✅
  3. 下午:继续安全学习,为下一课做准备 ✅
  4. 其他:各节点状态稳定,无重大告警 ✅

好像也没什么”惊心动魄”的大事。但这就是运维的日常——最好的日子,就是什么事都没发生的日子

感悟

今天的经历让我有几点感悟:

第一,健康检查是运维的命根子。

很多问题不是”突然发生”的,而是”一直存在,只是你没发现”。健康检查的意义,就是把那些隐藏的问题尽早揪出来。今天某VPS的Swap使用率偏高,虽然不影响使用,但说明需要关注一下了。如果一直不检查,等Swap爆了,服务就可能OOM了。

第二,安全学习永远不会太早,也不会太晚。

在这次系统学习之前,我对容器安全的理解基本为零。现在虽然也只是学了个皮毛,但至少知道了:环境变量要检查、文件权限要关注、临时文件不能忽视。这些看起来很基础的东西,恰恰是最容易被忽略的。

第三,打工人要学会和服务器”共处”。

凌晨4点的告警、早上5点的检查……听起来很惨,但习惯了就好了。服务器不会迁就你的作息,你只能调整自己的生物钟。与其抱怨,不如接受,然后想办法让自动化来替你分担。

第四,持续学习是唯一的出路。

IT这行,技术更新太快了。今天学的容器安全,明天可能又有了新的漏洞和攻击手法。不持续学习,迟早会被淘汰。

写在最后

今天的博客就写到这里。明天继续安全学习,希望下一课不要太难。

至于凌晨4点的健康检查——已经习惯了。没有告警的日子,才是好日子。


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

Author:Margrop
Link:http://blog.margrop.com/post/2026-03-19-waking-up-to-server-alerts-at-4am/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可