
1 つのサーバーで 60 のコンテナ
1 つのベアメタルボックスで数十から数百の Hoody コンテナを実行。KSM と BTRFS のデデュプでマージナルコストはほぼゼロ。
搭乗アナウンスが流れます。日次レポートのジョブは UTC の 7 時に設定されていますが、受信者は東京にいて、時刻が合っていません。スマホで crontab URL を開き、行をタップし、2 フィールドを変更し、保存をタップします。PATCH が通ります。ジョブは新しいスケジュールで今夜実行されます。SSH も踏み台もノート PC も不要です。
cron サービスは HTTPS 上の JSON を話します。スマホのブラウザは、新しい schedule フィールドを乗せて、エントリの UUID に対して PATCH を送ります。システムの crontab はサービスによって再注入されます。次回発火時刻はレスポンスボディに入ります。
PATCH は変更したフィールドだけを運びます。サービスは既存エントリへマージし、next_run を再計算し、行をシステム crontab に再注入します。SSH セッションも踏み台ホストもノート PC もありません。
編集の全体は、搭乗呼び出しと優先キューの間に収まります。URL を開く。フィールドを変える。機内へ歩く。
cron サービスには独自の URL があります。cron.containers.hoody.com/users/me/crontab です。同じページが、スマホのブラウザを含む任意のブラウザで開きます。認証は URL です。踏み台も AnyConnect プロンプトもノート PC の鍵の儀式もありません。
各管理エントリは schedule、command、comment、enabled を持つ JSON オブジェクトです。行をタップすると schedule フィールドが編集可能になり、0 7 * * * を 30 4 * * 1-5 に置き換えます。他のフィールドには触れません。
保存すると /users/me/entries/[id] に対する PATCH が発火します。レスポンスは 200 OK と新しい next_run を返します。システム crontab は 1 秒以内に更新されます。タブを閉じて歩き出すだけです。
Hoody Cron は crontab に対して小さな CRUD を公開します。各管理エントリには UUID があり、各エントリは個別に PATCH できます。以下は、スマホがジョブを編集、ミュート、一覧、削除するために使う 4 つのエンドポイントです。
Hoody Cron サービスのエンドポイントです。パスは https://PROJECT-CONTAINER-cron-1.SERVER.containers.hoody.com からの相対です。
6 インチ画面を持ってゲートに立つ人にとって、本当に意味のある数字です。
schedule、command、comment、enabled、expires_at。それぞれ単独で送れます。他のフィールドは触れられないので、昨日 9 時に書いたコメントは空港での編集を生き延びます。
スマホからの PATCH が 1 回、新しい next_run を返す 200 レスポンスが 1 回。同じ呼び出しの中でサービスがシステム crontab を再注入します。2 度目のリクエストもポーリングも要りません。
SSH も踏み台も AnyConnect もありません。crontab は URL であり、認証は URL です。ノート PC のハードウェアキーはバッグの中で待機です。
crontab が URL なら、その編集も URL です。
スケジュールがブラウザから届く場所になれば、自分が立っている場所が問題ではなくなります。搭乗ゲートは立派なオフィスです。スマホは立派なターミナルです。PATCH こそが変更そのものです。
ここに並ぶものの多くは、crontab がスマホから届かなかったから存在しているにすぎません。スケジュールが URL になれば、そこへたどり着くまでの儀式も一緒に消えます。
ゲートに立ったまま、今夜のジョブの発火時刻を変えました。