跳转到内容
use-cases / edit-crontab-from-phone / hero
CRON · PATCH · GATE 47B

在机场用手机编辑你的 crontab

登机广播响起。每日报表任务设在 UTC 早 7 点,但收件人在东京,时间不对。你在手机上打开 crontab URL,点那一行,改两个字段,按保存。PATCH 通过。任务今晚按新的时间表触发。无 SSH 会话、无跳板机、无笔记本。

阅读 cron 文档
use-cases / edit-crontab-from-phone / mechanism

手机来一次 PATCH,时间表上一条条目

cron 服务通过 HTTPS 讲 JSON。手机的浏览器对条目的 UUID 发一次 PATCH,带上新的 schedule 字段。系统 crontab 由服务重新注入。下次触发时间在响应体里。

patch.from-phone.sh
PATCH · sender
# 在 6 寸屏上的两行编辑curl -X PATCH \\"https://cron.containers.hoody.com/users/me/entries/0a3c8" \\-H "Content-Type: application/json" \\-d ["schedule":"30 4 * * 1-5"]# 工作日 04:30 —— 收件人在东京的本地时间
200 OK · cron.containers.hoody.com
GET · echo
HTTP/1.1 200 OK// 条目带着新的 schedule 和 next_run 一起返回{"id": "0a3c8","schedule": "30 4 * * 1-5","next_run": "2026-05-05T04:30:00+09:00","enabled": true}

PATCH 只携带变化的那个字段。服务把它合并进现有条目,重新计算 next_run,并把那行重新注入系统 crontab。无 SSH 会话、无跳板机、无笔记本。

use-cases / edit-crontab-from-phone / moves

从广播到登机口,只需三个动作

整个编辑塞在登机广播和优先登机队列之间。打开 URL。改字段。走向飞机。

OPEN

打开 crontab URL

cron 服务有自己的 URL —— cron.containers.hoody.com/users/me/crontab。同一个页面在任何浏览器里都能打开,包括你手机上的浏览器。鉴权就是 URL。无堡垒机、无 AnyConnect 提示、无笔记本上密钥的仪式。

EDIT

点一行,改一个字段

每条受管理条目是一个 JSON 对象,带 schedule、command、comment、enabled。你点那一行,schedule 字段进入可编辑状态,你把 0 7 * * * 替换成 30 4 * * 1-5。其他字段毫发无损。

SAVE

PATCH 落地,走向登机口

保存触发对 /users/me/entries/[id] 的 PATCH。响应是 200 OK,并返回新的 next_run。系统 crontab 在一秒内被更新。你关掉标签页继续走。

use-cases / edit-crontab-from-phone / facts

手机能命中的四条路由

Hoody Cron 在 crontab 上暴露一个小的 CRUD。每条受管理条目都有 UUID;每条条目都可以被独立 patch。下面是手机用来编辑、静音、列出或删除任务的四个端点。

MANAGED ENTRIES · /users/me/entries
PER-USER ISOLATION
  • GET/users/me/entries列出当前用户的受管理条目。每行携带 id、schedule、command、comment、enabled、next_run。
  • PATCH/users/me/entries/[id]部分更新。只发送你改过的字段。schedule、command、comment、enabled、expires_at 都可独立 patch。
  • POST/users/me/entries用 JSON 创建一条新的受管理条目。接受标准 5 字段调度加宏(@hourly、@daily、@weekly、@monthly、@yearly)。
  • DELETE/users/me/entries/[id]删除一条条目。服务在不带它的情况下重新注入系统 crontab。在机场的修改是错的、想暂时干掉这个任务时很有用。

端点以 Hoody Cron 服务为准。路径相对于 https://PROJECT-CONTAINER-cron-1.SERVER.containers.hoody.com。

use-cases / edit-crontab-from-phone / capacity

手机编辑给你什么

对一个站在登机口、屏幕只有 6 寸的人来说,真正重要的数字。

  1. FIELDS PATCHABLE5

    schedule、command、comment、enabled、expires_at。每一个都可以单独发送。其他字段保持不变,所以你昨天上午 9 点写下的注释能在机场编辑后保留。

  2. ROUND-TRIP

    手机一次 PATCH。一次 200 响应,带回新的 next_run。系统 crontab 在同一次调用里就被服务重新注入 —— 无第二次请求,无轮询。

  3. SHELL SESSIONS0

    无 SSH、无堡垒机、无 AnyConnect。crontab 是一个 URL,鉴权也是 URL。笔记本上的硬件密钥可以留在包里。

use-cases / edit-crontab-from-phone / punchline

你的 crontab 是 URL,所以编辑它也是 URL。

当时间表能从浏览器到达,你恰好站在哪里就不再重要。登机口是一个不错的办公室。手机是一个不错的终端。PATCH 就是改动。

BEFORE · LAPTOP-ONLY EDITssh prod-bastion → sudo crontab -e开笔记本 · VPN · 跳板机 · vi
AFTER · ONE URLPATCH /users/me/entries/0a3c8点那一行 · 改字段 · 走向登机口
  • 无 SSH
  • 无笔记本
  • 下次触发就是现在
阅读 cron API
use-cases / edit-crontab-from-phone / replaces

这取代了什么

其中很多东西之所以存在,只因为 crontab 不能从手机到达。当时间表是一个 URL,围绕到达时间表的那些仪式也随之消失。

  • SSH from a laptop第一个有用的按键之前要忍受二十分钟的摩擦
  • ssh-bastion access多一跳,带着自己的凭证和超时
  • "I'll do it when I'm home"因为笔记本在另一个时区,延迟六小时
  • PagerDuty manual cron edits为两行调度修改而呼叫值班人来照看
  • Hardware key + bastion + crontab juggling为一个字段动用三个秘钥和一个 vi 会话
  • Slack-the-senior-engineer把另一个人吵醒,只为分享一个你自己已经有的 URL
use-cases / edit-crontab-from-phone / cta

你站在登机口,改了今晚任务的触发时间。

阅读 cron 文档
use-cases / edit-crontab-from-phone / related

阅读其他内容