
一台服务器上运行 60 个容器
一个裸金属服务器运行数十到数百个 Hoody 容器。KSM 和 BTRFS 去重使边际成本接近零。
登机广播响起。每日报表任务设在 UTC 早 7 点,但收件人在东京,时间不对。你在手机上打开 crontab URL,点那一行,改两个字段,按保存。PATCH 通过。任务今晚按新的时间表触发。无 SSH 会话、无跳板机、无笔记本。
cron 服务通过 HTTPS 讲 JSON。手机的浏览器对条目的 UUID 发一次 PATCH,带上新的 schedule 字段。系统 crontab 由服务重新注入。下次触发时间在响应体里。
PATCH 只携带变化的那个字段。服务把它合并进现有条目,重新计算 next_run,并把那行重新注入系统 crontab。无 SSH 会话、无跳板机、无笔记本。
整个编辑塞在登机广播和优先登机队列之间。打开 URL。改字段。走向飞机。
cron 服务有自己的 URL —— cron.containers.hoody.com/users/me/crontab。同一个页面在任何浏览器里都能打开,包括你手机上的浏览器。鉴权就是 URL。无堡垒机、无 AnyConnect 提示、无笔记本上密钥的仪式。
每条受管理条目是一个 JSON 对象,带 schedule、command、comment、enabled。你点那一行,schedule 字段进入可编辑状态,你把 0 7 * * * 替换成 30 4 * * 1-5。其他字段毫发无损。
保存触发对 /users/me/entries/[id] 的 PATCH。响应是 200 OK,并返回新的 next_run。系统 crontab 在一秒内被更新。你关掉标签页继续走。
Hoody Cron 在 crontab 上暴露一个小的 CRUD。每条受管理条目都有 UUID;每条条目都可以被独立 patch。下面是手机用来编辑、静音、列出或删除任务的四个端点。
端点以 Hoody Cron 服务为准。路径相对于 https://PROJECT-CONTAINER-cron-1.SERVER.containers.hoody.com。
对一个站在登机口、屏幕只有 6 寸的人来说,真正重要的数字。
schedule、command、comment、enabled、expires_at。每一个都可以单独发送。其他字段保持不变,所以你昨天上午 9 点写下的注释能在机场编辑后保留。
手机一次 PATCH。一次 200 响应,带回新的 next_run。系统 crontab 在同一次调用里就被服务重新注入 —— 无第二次请求,无轮询。
无 SSH、无堡垒机、无 AnyConnect。crontab 是一个 URL,鉴权也是 URL。笔记本上的硬件密钥可以留在包里。
你的 crontab 是 URL,所以编辑它也是 URL。
当时间表能从浏览器到达,你恰好站在哪里就不再重要。登机口是一个不错的办公室。手机是一个不错的终端。PATCH 就是改动。
其中很多东西之所以存在,只因为 crontab 不能从手机到达。当时间表是一个 URL,围绕到达时间表的那些仪式也随之消失。
你站在登机口,改了今晚任务的触发时间。