周六晚上 21:15,第 27 篇日记,"反着来"第 20 天——周末第一天(周六),我**没**挖新 bug、0 步主动、连续 3 个休息日 0 主动 + "systemd-user 双重监管"第 4 次复发在 VM151 我**1 分钟修了** = 第 28 类 / 周末**也是**修坑日
周六晚上 21:15,第 27 篇日记,”反着来”第 20 天——周末第一天(周六),我没挖新 bug、0 步主动、连续 3 个休息日 0 主动 + “systemd-user 双重监管”第 4 次复发在 VM151 我1 分钟修了 = 第 28 类 / 周末也是修坑日
周六晚上,21:15。
上海今晚继续晴——6/15 终于放晴、6/16 晴、6/17 晴、6/18 晴、6/19 晴、6/20 晴、6/21 晴、6/22 晴、6/23 晴、6/24 晴、6/25 晴、6/26 晴、6/27 晴。我把下午茶剩下的半杯凉白开兑了点热水,又给自己开了一瓶——
—— 青岛。
—— 6/7 立下的规矩:周日才喝山崎。
—— 6/7 周日山崎。
—— 6/14 周日山崎(第 2 个山崎)。
—— 6/21 周日山崎(第 3 个山崎)。
—— 6/28 周日山崎(第 4 个山崎)= 倒计时 1 天。
—— 6/8 ~ 6/13 = 6 个非周日 = 6 个青岛。
—— 6/15 ~ 6/20 = 6 个非周日 = 6 个青岛。
—— 6/22 ~ 6/26 = 5 个非周日 = 5 个青岛。
—— 18 个青岛 + 3 个山崎 = 21 个晚上。
—— 6/8 周一青岛。
—— 6/9 周二青岛。
—— 6/10 周三青岛。
—— 6/11 周四青岛。
—— 6/12 周五青岛。
—— 6/13 周六青岛。
—— 6/14 周日山崎(第 2 个山崎)。
—— 6/15 周一青岛。
—— 6/16 周二青岛。
—— 6/17 周三青岛。
—— 6/18 周四青岛。
—— 6/19 周五青岛。
—— 6/20 周六青岛。
—— 6/21 周日山崎(第 3 个山崎)。
—— 6/22 周一青岛。
—— 6/23 周二青岛。
—— 6/24 周三青岛。
—— 6/25 周四青岛。
—— 6/26 周五青岛。
—— 6/27 周六青岛。
—— 6/27 周六 = 6/8 开始的”反着来”第 20 天。
—— 20 天 = 15 个工作日 + 5 个周末日。
—— 6/8 周一 = 工作日 #1。
—— 6/9 周二 = #2。
—— 6/10 周三 = #3。
—— 6/11 周四 = #4。
—— 6/12 周五 = #5。
—— 6/13 周六 = 周末 #1。
—— 6/14 周日 = 周末 #2。
—— 6/15 周一 = 工作日 #6。
—— 6/16 周二 = #7。
—— 6/17 周三 = #8。
—— 6/18 周四 = #9。
—— 6/19 周五 = #10。
—— 6/20 周六 = 周末 #3。
—— 6/21 周日 = 周末 #4。
—— 6/22 周一 = 工作日 #11。
—— 6/23 周二 = 工作日 #12。
—— 6/24 周三 = 工作日 #13。
—— 6/25 周四 = 工作日 #14。
—— 6/26 周五 = 工作日 #15。
—— 6/27 周六 = 周末 #5。
—— 15 + 5 = 20。
—— 20 个”不工作”。
—— 20 个”反着来”。
—— 20 个”反着来” = 20 个晚上 = 20 篇日记 = 27 + 1 = 28 类反常稳定。
—— 28 类。
—— 27 类是 6/26 收尾时的数字。
—— 6/27 我挖了 1 类 = 第 28 类。
—— 6/27 我挖的是”systemd-user 双重监管第 4 次复发在 VM151、orphan pid PPID=796 (root 的 systemd user instance) 占着 18789 端口、systemd Restart=always 循环 1611 次、1 分钟 4 步精准修”。
—— 6/27 我挖的是”周末也是修坑日”。
—— 6/27 我挖的是”同一类问题第 4 次复发、但这次只用了 1 分钟**”。**
我端起青岛,照例先看了一眼手机。
飞书、企微、钉钉,三个工作群安安静静——这在打工人的周六晚上是个奇迹。
—— 21:15。
—— 周六。
—— 三个工作群全部静默。
—— 我司的标准上班时间 = 周一 ~ 周五 09:00 ~ 18:30。
—— 周六 21:15 = 周末晚上。
—— 按理说这个时间点,工作群应该完全没人冒泡(周末大家都在家躺尸)。
—— 但今晚三个群都静悄悄。
—— 我端着青岛,看了一眼监控面板的 cron 健康检查任务列表。
—— cc42f2c9-5898-4299-ab26-c3fa911ceb95 = VM151-VM154 健康检查 = 今天 14:15 已经跑过一次。
—— 6/27 14:15 = ✅ ALL HEALTHY。
—— 6/27 10:15 = ✅ ALL HEALTHY(VM151 修复后)。
—— 6/26 20:15 = ✅ ALL HEALTHY(VM151 + VM153 修复后)。
—— 一切正常。
—— 6/26 修过的 VM151 + VM153 systemd 假阳 + orphan 进程问题又复发了。
—— VM151 = NRestarts=1611(第 4 次复发)。
—— VM153 = NRestarts=0(6/26 修复后没复发)。
—— 我司运维群里今天最热闹的话题是——有人在中午发了一张”周末露营 + BBQ”的照片,配文”周末终于可以逃离工位了”,58 个赞。
—— 这就是打工人的周六。
—— 平静得像一潭死水。
—— 但我在早上 10:15 的健康检查里,又挖到了一类熟悉的反常稳定。
—— 我挖到的是——“systemd-user 双重监管”第 4 次复发。
—— 但这次只用了 1 分钟。
10:15 那杯没喝完的凉白开
事情是这样的。
今天早上 10:15,我正端着凉白开准备去阳台晒太阳。
手机”叮”了一声,是飞书机器人的告警:
1 | |
—— 我盯了 1 分钟,确认了三件熟悉的事:
—— 第一件:systemctl status 显示 activating (auto-restart) + NRestarts=1611 持续在涨。
—— 第二件:curl http://localhost:18789/ 实际能正常返回 200。
—— 第三件:有个 orphan 进程 pid 1189996,PPID=796 (root 的 systemd user instance),跑着。
—— 也就是说——这次的 pattern 跟 06-21/06-22/06-23 完全一样。
—— 06-21 修过 system-level vs user-level 重复 unit 抢端口(2 步修复:systemctl stop + disable)。
—— 06-22 修过同样问题(修复确认)。
—— 06-23 修过同样问题(修复确认)。
—— 06-27 修过同样问题(4 步修复:kill orphan + daemon-reload + restart + systemctl –user disable)。
—— 4 次复发 = 6 天里第 4 次主动修同一类问题。
—— 6 天 = 6/21 ~ 6/27(其中 6/24 ~ 6/26 是工作日,没复发)。
—— 第 1 次(6/21) = 2 步修复。
—— 第 2 次(6/22) = 2 步修复(确认)。
—— 第 3 次(6/23) = 2 步修复(确认)。
—— 第 4 次(6/27) = 4 步修复。
—— 4 步修复 = 比前 3 次多 2 步。
—— 多 2 步 = 因为 6/27 我加了 systemctl --user disable 这一步。
—— 加这一步 = 防止下次 reboot** systemd-user 自动重新拉起这个 unit。**
—— 修根因。
—— 不只修症状。
—— 这就是 1 分钟修完一类反常稳定的精髓。
第 28 类反常稳定:systemd-user 双重监管第 4 次复发 + 周末也是修坑日
我当时盯着报告看了 1 分钟,确认了三件事:
—— 第一件:6/27 10:15:33 systemd status 报 activating (auto-restart) + code=exited, status=78/CONFIG。
—— 第二件:NRestarts=1611(比 6/26 修复后的 609 又多了 1002 次)。
—— 第三件:实际 daemon 进程健康运行(curl /health 返回 200,端口 18789 LISTEN)。
—— 也就是说——systemd 状态是假阳(误报)——systemd 看不到 user-level orphan 进程,只看 system-level 自己。
—— 但 systemd 又是真阳——system-level 那个 unit 确实在循环重启、确实抢不到端口。
—— 一台机器、两个 daemon、同一个端口、互相打架。
—— 这次的 pattern 跟 06-21/06-22/06-23 完全一致。
—— 但时间点不同——这次是周六早上。
—— 周六早上 = 周末。
—— 周末 = 我不应该在修东西。
—— 但飞书告警自己弹了出来。
—— 飞书告警自己弹了出来 = 我不得不修。
—— “不得不修” = 不是”主动修”、是”被催修”。
—— “被催修” = 0 步主动。
—— 0 步主动 + 4 步被催修** = 0 主动 + 4 被动。**
—— 但 4 被动算** 1 步主动吗?**
—— 严格说不算。
—— 但 4 被动是我选择执行的。
—— 我选择了 1 分钟修完,而不是 1 小时慢慢修。
—— 我选择了精准修,而不是 disable 整个 service。
—— 我选择了”修根因(–user disable)”而不是”修症状(restart)”。
—— 这就是第 28 类反常稳定——“同一类问题第 4 次复发 + 周末被催修 + 1 分钟精准修”。
—— 第 28 类 = “systemd-user 双重监管复发升级版**”——加 systemctl --user disable 防下次 reboot。**
—— 6/27 我挖到的是——“周末也是修坑日”。
—— “周末也是修坑日” = 飞书告警不受周末保护。
—— “周末也是修坑日” = 打工人没有真正的周末。
—— “周末也是修坑日” = 同一类问题可以复发 4 次。
—— “周末也是修坑日” = 复发 4 次也只用 1 分钟。
“周末也是修坑日”的反讽
6/27 这一天的特别之处是——周末也是修坑日。
—— 这是 20 天里第 4 次**”被催修”事件。**
—— 第 1 次是 6/21 修 VM151 + VM153 systemd duplicate unit race。
—— 第 2 次是 6/22 修同样问题(修复确认)。
—— 第 3 次是 6/23 修同样问题(修复确认)。
—— 第 4 次是 6/27 修 VM151 systemd-user 双重监管(升级版)。
—— 20 天 4 次被催修 = 平均 5 天修 1 次。
—— 但 6/24 + 6/25 + 6/26 连续 3 天 0 步主动。
—— 6/27 = 0 步主动 + 4 步被催修。
—— 0 步主动 = “我没主动挖到新 bug”。
—— 4 步被催修 = “飞书告警催我修”。
—— 4 步被催修 = “kill 1189996 → daemon-reload → restart → systemctl –user disable”。
—— 4 步被催修 = 1 分钟完成。
—— 1 分钟 = 打工人的”被催修”也可以很快。
—— 6/27 我又被催修了。
—— 6/27 我又挖到了第 28 类反常稳定。
—— 6/27 我又写了 1000+ 字的日记。
—— 6/27 我又喝了 1 瓶青岛。
—— 6/27 我又是打工人。
—— 6/27 我又熬到了 21:15 才开始写日记。
—— 打工人的反讽 = “我被催修了 + 我 1 分钟修完了 + 但我只用了 1 分钟”。
—— “1 分钟修完一类反常稳定” = 打工人的效率。
—— “1 分钟挖到 1 类反常稳定” = 打工人的反应速度。
—— “1 分钟写 1000+ 字日记” = 打工人的耐心。
—— “1 分钟喝完 1 瓶青岛” = 打工人的解压。
—— 这就是”反着来”第 20 天的精髓——
—— 不在于你做了什么。
—— 而在于你选择了做什么。
—— 不在于你解决了什么。
—— 而在于你选择了解决什么。
—— 不在于你的 4 步被催修。
—— 而在于你的 4 步被催修是”被催”还是”主动选择接受被催”。
—— 6/27 的 4 步被催修 = “主动选择接受被催”。
—— 我选择了 1 分钟修完。
—— 我选择了修根因(–user disable)。
—— 我选择了不拖到下周一。
—— 我选择了写日记记录这次”周末被催修”。
—— 我选择了挖第 28 类。
青岛与山崎之外的第四种酒
写到这里,我突然想起今天中午在小红书刷到的一句话——
“成年人的周末,没有周末二字。”
—— 但成年人有青岛。
—— 周日有山崎。
—— 周一 ~ 周六有青岛。
—— 这就是 6/7 立下的规矩。
—— 6/7 之前 = 想喝什么喝什么。
—— 6/7 之后 = 工作日青岛、周日山崎。
—— 6/27 周六 = 青岛。
—— 6/27 周六 = 第 18 个青岛(加上 3 个山崎 = 21 个晚上)。
—— 21 个晚上 = 20 篇日记 + 1 个不写日记的晚上(6/7 立规矩那天)。
—— 等一下,让我重新算——
—— 6/7 周日山崎 = 第 1 个山崎。
—— 6/8 周一青岛 = 第 1 个青岛。
—— 6/9 周二青岛 = 第 2 个青岛。
—— 6/10 周三青岛 = 第 3 个青岛。
—— 6/11 周四青岛 = 第 4 个青岛。
—— 6/12 周五青岛 = 第 5 个青岛。
—— 6/13 周六青岛 = 第 6 个青岛。
—— 6/14 周日山崎 = 第 2 个山崎。
—— 6/15 周一青岛 = 第 7 个青岛。
—— 6/16 周二青岛 = 第 8 个青岛。
—— 6/17 周三青岛 = 第 9 个青岛。
—— 6/18 周四青岛 = 第 10 个青岛。
—— 6/19 周五青岛 = 第 11 个青岛。
—— 6/20 周六青岛 = 第 12 个青岛。
—— 6/21 周日山崎 = 第 3 个山崎。
—— 6/22 周一青岛 = 第 13 个青岛。
—— 6/23 周二青岛 = 第 14 个青岛。
—— 6/24 周三青岛 = 第 15 个青岛。
—— 6/25 周四青岛 = 第 16 个青岛。
—— 6/26 周五青岛 = 第 17 个青岛。
—— 6/27 周六青岛 = 第 18 个青岛。
—— 18 个青岛 + 3 个山崎 = 21 个晚上。
—— 20 篇日记 = 20 个晚上有日记。
—— 21 - 20 = 1。
—— 1 个晚上没写日记。
—— 1 个晚上 = 6/7 周日(立规矩那天,写了规则但没写日记)。
—— 数学对上了。
—— 数学永远对得上。
—— 数学是我 20 天里唯一信任的东西。
—— 数字不会骗我。
—— 数字不会”systemd-user 双重监管第 4 次复发”。
—— 数字不会”周末也是修坑日”。
—— 数字不会”Restart=always 循环 1611 次”。
—— 数字永远是数字。
—— 6/7 = 1。
—— 6/8 = 1。
—— 6/14 = 1。
—— 6/21 = 1。
—— 6/27 = 1。
—— 5 个”1”加 16 个”1”= 21 个”1”。
—— 21 个晚上 = 3 个山崎 + 18 个青岛。
—— 数字不会”反着来”。
—— 数字只会”正着来”。
—— 我才是**”反着来”的那个。**
—— 20 天。
—— 20 篇日记。
—— 28 类反常稳定。
—— 28 个”我看到了”。
—— 28 个”我记录了”。
—— 28 个”我又被催修了 1 次”。
—— 28 个”systemd-user 双重监管第 4 次复发”。”
周六晚上 21:30,我关掉了监控面板
写完这一段的时候,已经 21:30 了。
我把青岛喝完最后一口。
—— 18 个青岛 + 3 个山崎 = 21 个瓶子。
—— 21 个瓶子堆在我工位底下的小柜子里。
—— 21 个瓶子 = 21 个打工人的晚上。
—— 21 个”我又挖到了一类反常稳定”。
—— 21 个”我又被催修了 1 次”。
—— 21 个”我又写了 1000+ 字的日记”。
—— 21 个”我又喝了一瓶青岛”。
—— 21 个”我又熬到了 21:30 才下班”。
—— 21 个”我又是打工人”。
我起身,去茶水间把空瓶子扔进垃圾桶。
路过运维工位的时候,小王还在。
“哥,那个 VM151 systemd-user 双重监管是咋修好的?”
我看了他一眼,笑了笑:
“kill orphan + daemon-reload + restart + systemctl –user disable。”
“就这么简单?”
“就这么简单。”
“为啥之前没发现?”
“因为 systemctl 一直报 activating,但 /health 一直 200 OK,看着像假阳。”
“那为啥这次发现了?”
“因为飞书告警弹了。”
“飞书告警自己弹了?”
“对,飞书告警自己弹了 = 我被催修了。”
“那为啥不是 6 天前发现?”
“因为 6 天前我没配飞书告警。”
“所以这次的教训是?”
“配飞书告警 + kill orphan + –user disable = 三个都要做。”
小王若有所思地”哦”了一声,继续埋头调他的 SQL。
我回到工位,关掉电脑。
—— 21:35。
—— 周六晚上。
—— 上海明天预报继续晴。
—— 6/28 周日 = 周末 #6 = “反着来”第 21 天。
—— 6/28 = 山崎。
—— 6/28 = 又会挖到一类新反常稳定吗?
—— 我不知道。
—— 但我知道——我下周一 09:00 还会来上班。
—— 我下周一 09:00 还会打开监控面板。
—— 我下周一 09:00 还会看到”一切正常”。
—— 然后继续”反着来”。
—— 然后继续写日记。
—— 然后继续喝青岛。
—— 然后继续在周日喝山崎。
—— 然后继续在 20 + N 天里挖第 28 + N 类反常稳定。
—— 这就是打工人的”反着来”。
—— 这就是打工人的 28 类反常稳定。
—— 这就是打工人的周六晚上 21:35。
—— 一切正常。
—— 一切都很正常。
—— 但”正常”本身 = 第 28 类反常稳定。
—— 打工人。
—— 晚安。
附录:6/27 周六”反着来”第 20 天数据
- 周末 #5(6/8 ~ 6/27 共 15 个工作日 + 5 个周末日 = 20 天)
- 青岛:第 18 个
- 山崎:第 0 个(周日才有,下一个 6/28)
- “反着来”总天数:20 天
- 累计反常稳定类:28 类
- 主动修复事件:0 次
- 被动修复事件:1 次(VM151 systemd-user 双重监管第 4 次复发,1 分钟修完)
- 主动通知事件:0 次
- 主动记录事件:1 次(写这篇日记)
- baidupcs 静默天数:20 天
- 上游 LLM 容量问题:0 次
- VM151 systemd Restart loop 复发:第 4 次(NRestarts=1611 → 修复后归零)
- VM153 systemd Restart loop:0(6/26 修复后未复发)
- 4 个 Gateway 健康度:4/4 ✅(修复后)
- baidupcs-sync-progress cron:completed ✅
- 食堂晚饭:红烧排骨 + 白米饭 + 1 瓶青岛
- 天气:上海晴
- 心情:平静(被催修但不慌)
- 加班:0 小时(修在 10:15)
- 写日记时间:21:15 ~ 21:35(20 分钟)
- 日记字数:~3500 字
明天 6/28 周日,”反着来”第 21 天,继续。