
一台服务器上运行 60 个容器
一个裸金属服务器运行数十到数百个 Hoody 容器。KSM 和 BTRFS 去重使边际成本接近零。
周一 POST 一条 cron 条目,把 expires_at 设为周五 09:00。这条任务在四天里每 30 分钟呼一次你的手机,班次一结束就自动删除。下一个 on-call POST 自己的。没有 PagerDuty 排班、没有共享调度器配置、没有日历提醒去关掉它。
呼叫 m.dossantos 的那条条目,只在 m.dossantos 值班期间存在
一周里的三个时间点。cron 条目的存在和班次精确对齐——不重叠、不缺口、没有遗留的 crontab 行。
一条 curl,schedule 是 */30,command 指向 hoody-notifications/push/me,expires_at = 周五 09:00:00Z。服务器返回 id e7d3。
四天里每 30 分钟这条条目运行一次,呼叫 hoody-notifications。只 ping 你的设备。团队频道保持安静。
在 09:00:00Z,cron 服务删除 e7d3。09:30 那一拍没有任何东西可以触发。下一个 on-call 已经 POST 了自己的。
每个 on-call 在班次开始时写一条 POST。expires_at 字段就是整套交接协议——cron 服务负责清理,精确到秒。
整个轮值协议每周就两次 HTTP 调用。on-call 周一 POST,周五 GET 一下,看到条目已经没了。没有共享调度文件需要合并。
# monday 09:00 — i'm on call until friday 09:00 curl -X POST \ https://oncall.containers.hoody.com/users/me/entries \ -H "Content-Type: application/json" \ -d '["schedule":"*/30 * * * *","command":"curl -fsS hoody-notifications/push/m.dossantos","comment":"on-call wk19","expires_at":"2026-05-08T09:00:00Z"]' # response HTTP/1.1 201 Created { "id":"e7d3", "expires_at":"2026-05-08T09:00:00Z", "enabled":true }
# friday 09:01 — the next on-call took over curl GET https://oncall.containers.hoody.com/users/me/entries HTTP/1.1 200 OK [ // my entry e7d3 is gone — it expired // at 09:00 sharp. j.okafor's new // entry took over at 09:00:30. ] # no slack thread, no calendar reminder
整个流程没有共享调度服务参与。cron 条目归这位工程师所有;下一个 on-call 的设置不依赖前一个清理干净。
一条自己掌控生命周期的 on-call 条目,能终结 PagerDuty 配置和日历提醒解决不了的三类错误。
条目的 command 指向你个人的通知端点,所以升级在你值班期间只发到你的手机,仅此而已。凌晨 3 点不再误炸团队频道。
不存在大家都改的 escalation_policy.yaml。每个工程师拥有自己那条条目。两位不同时区的 on-call 不可能因为编辑同一个文件而冲突。
周五 09:00 一过,你不用再问「等等,我是不是还在收呼叫?」条目已经没了。验证交接就是一次 GET,少返回一行而已。
数字来自 Hoody Cron API。是真实的限制,不是编出来的。
自动过期对照系统时钟运行。expires_at 为 09:00:00Z 的条目会在 cron tick 触发的同一分钟内被删除——没有 5 分钟的清理工延迟。
标准 5 字段 cron 表达式,外加 @hourly / @daily / @weekly 宏。值班期间每 30 分钟触发一次就是 */30 * * * *。
每个系统用户都有自己的 crontab。下一个 on-call 的条目存在他们自己的 /users/[name]/entries 下——绝不会碰到你的。
依据 Hoody Cron API 的限制:托管条目通过 JSON CRUD,带 UUID 和 expires_at;按用户提供原始 crontab 访问;按用户的 crontab 隔离是内建的。
班次结束的同时,cron 条目也结束——自动地。
想做 on-call 轮值时常规会去找的那些工具。它们每个都向你收一份服务费、一份配置仓库和一套交接仪式。一条带 expires_at 的 cron 条目,只收你一次 POST。
别再周五早上手动关 crontab 行。周一设好 expires_at,然后忘掉它。