コンテンツにスキップ
タイプアンロック
ステージ本番環境
難易度中程度
ジョブタスクを自動化
対象ソロ起業家
対象バックエンド開発者
サービスCron
サービスブラウザ
サービスSQLite
サービスファイル
Hoody の利点HTTP ネイティブ
Hoody の利点コンテナ経済学
タイプアンロック
ステージ本番環境
難易度中程度
ジョブタスクを自動化
対象ソロ起業家
対象バックエンド開発者
サービスCron
サービスブラウザ
サービスSQLite
サービスファイル
Hoody の利点HTTP ネイティブ
Hoody の利点コンテナ経済学
タイプアンロック
ステージ本番環境
難易度中程度
ジョブタスクを自動化
対象ソロ起業家
対象バックエンド開発者
サービスCron
サービスブラウザ
サービスSQLite
サービスファイル
Hoody の利点HTTP ネイティブ
Hoody の利点コンテナ経済学
タイプアンロック
ステージ本番環境
難易度中程度
ジョブタスクを自動化
対象ソロ起業家
対象バックエンド開発者
サービスCron
サービスブラウザ
サービスSQLite
サービスファイル
Hoody の利点HTTP ネイティブ
Hoody の利点コンテナ経済学
CRON · 1 CRONTAB · 1 コンテナ

3 つのカデンス、定額制のサーバー上の 1 つのコンテナ

毎時のブラウザスクレイプ、日次の SQLite ダイジェスト、週次のファイルアーカイブ。3 つのリズムは 1 つの crontab にきれいに収まります — 3 つのスクリプトを指す 3 行の `* * * * *` にすぎません。スケジューラサービスもジョブキューもワーカープールもありません。

cron ドキュメントを読む
請求
今月
定額制サーバー / 月
  • 1 つのサーバー内で実行
  • 3 つのカデンス
  • ゼロのスケジューラサービス
コンテナ CPU · 24 時間
−24h → 現在
アイドルのベースライン~4%
3 つのトリガー時刻にだけスパイク — その間はフラット

1 つの PUT がスケジュール全体を書き込む

Hoody Cron サービスは raw crontab を REST リソースとして公開します。一度ファイルを PUT すれば、カーネルが永遠に実行します。3 行、3 スクリプト — それぞれがすでに HTTP を話す 1 行スクリプトです。

リクエスト · /users/root/crontab
PUT · 生の crontab
# 1 回の呼び出しで crontab 全体を置き換えます。
PUT /users/root/crontab
Content-Type: text/plain

@hourly  bash /scripts/scrape.sh
0 9 * * * bash /scripts/digest.sh
0 0 * * 0 bash /scripts/archive.sh

HTTP/1.1 204 No Content
残りはカーネルが行う
スクリプト · /scripts/*.sh
exec · 3 つの本体
# scrape.sh — 毎時、スクリーンショットを sqlite にファンアウト
curl -sS https://browser.containers.hoody.com/screenshot \
  --data-urlencode "url=https://store.hoody.com/p/123" | sqlite3 /data/prices.db \
  "INSERT INTO rows VALUES (?, ?, ?)"

# digest.sh — 9 時、差分を計算してダイジェストをパイプ
sqlite3 /data/prices.db < /scripts/digest.sql \
  > /tmp/digest.txt && curl -T /tmp/digest.txt \
  https://pipe.hoody.com/api/v1/pipe/digest

# archive.sh — 日曜の真夜中、ダンプして保存
sqlite3 /data/prices.db ".dump" | curl -T - \
  https://files.containers.hoody.com/archives/$(date +%Y-w%V).sql

3 つのスクリプト。それらがすでに呼び出し方を知っている 3 つの URL。スケジュールをインストールするための 1 回の PUT リクエスト。この前にスケジューラサービスはありません — カーネルの crond があなたが書いたファイルを読んで実行します。

3 つのリズム、3 つのスクリプト

各カデンスには、1 つの 5 フィールド表現と 1 つのシェル行があるだけです。どれも他の 2 つを知る必要がありません — ディスクとクロックを共有しているだけです。

毎時 · スクレイプ

競合ページを SQLite に取り込む

hoody-browser が製品 URL のリストをスクリーンショットします。各行はコンテナのボリューム上の SQLite テーブルに直接入ります。スクレイプワーカープールはありません — cron 行がワーカープールです。

@hourly bash /scripts/scrape.sh
日次 · ダイジェスト

差分を計算し、ダイジェストをプッシュ

9 時にダイジェストスクリプトが直近 24 時間の行を読み、価格差分を計算し、ダイジェストをパイプ URL に curl します。受信トレイ / ダッシュボードは同じパイプから読みます。

0 9 * * * bash /scripts/digest.sh
週次 · アーカイブ

1 週間分をファイル URL にダンプ

日曜の真夜中にアーカイブスクリプトが SQLite を `.dump` し、ISO 週でファイル名を付けて hoody-files に PUT します。古い行は削除されます。ボリュームは永久に小さく保たれます。

0 0 * * 0 bash /scripts/archive.sh

3 行で得られるもの

1 つのコンテナの中の 3 つのカデンスはハックではありません — それは cron の自然な形です。プラットフォームはすでにスケジューラを提供しています。3 倍のお金を払うのをやめただけです。

ストレージ

3 つのスクリプトすべてが 1 つのディスクを共有

毎時のスクレイプは、日次のダイジェストが読む行を書きます。日次のダイジェストは、週次のアーカイブがダンプする差分を書きます。それらの間に IPC はありません — 同じボリューム上の 3 つのプロセスです。

オペレーション

再起動するコンテナは 3 つではなく 1 つ

再デプロイするときは 1 つのイメージを再デプロイします。ログを確認するときは 1 つのログファイルを tail します。ディスクが満杯になるときは 1 度満杯になります。どのカデンスの影響範囲も他と同じです。

経済性

1 つの定額制のサーバー、スケジューラティアなし

Lambda/EventBridge は呼び出しごとに課金します。ECS Scheduled Tasks は常時稼働クラスタに課金します。Hoody では、定額制のサーバー内で動作します。3 つのカデンスは 1 つと同じコスト。

実際の使い方

crontab はファイルです。ファイルには URL があります。ファイルに対してできることは何でも、HTTP 経由でできます。

  1. 4 つ目を追加

    POST /users/root/entries

    UUID とオプションのコメントを持つマネージドエントリを作成します。API が crontab に行を挿入し、後で有効化、無効化、削除するためのハンドルを返します。

  2. 削除せずに無効化

    PATCH enabled: false

    インシデント中にカデンスを一時停止し、定義を失わないようにします。インシデントがクローズしたらまたオンに戻します。行はファイルに残り、managed-disabled としてコメントされます。

  3. ファイルを読む

    GET /users/root/crontab

    すべてのマネージドエントリを含む raw crontab をいつでも取得します。リポジトリと差分を取ります。バージョン管理にパイプします。cron はファイルであり、今やそのファイルは URL です。

Hoody Cron API のエンドポイント: マネージドエントリ CRUD に加えて、ユーザーごとの完全な raw-crontab 読み書き。標準の 5 フィールド表現とマクロ (@hourly、@daily、@weekly)。

支払っていないもの

実際のメカニックから得た 3 つの数字。数値は Hoody Cron API の保証と定額制のサーバーモデルによるもので、捏造したベンチマークではありません。

  1. サーバー

    3 つのカデンスすべてが定額制のサーバー内で動きます。月額 $29 からの入門サーバー。追加の cron 行は追加料金なし。

  2. CRON 行

    1 つの @hourly、1 つの 9 時の日次、1 つの日曜の週次。/users/root/crontab に 3 行。オーケストレーター全体が 1 つの PUT リクエストに収まります。

  3. 追加サービス0

    Lambda なし、EventBridge なし、Sidekiq なし、Airflow スケジューラなし、ECS スケジュールタスク定義なし。cron の HTTP API がスケジューラです。

Hoody Cron API より: JSON CRUD によるマネージドエントリ、raw-crontab の読み書き、expires_at による自動失効、ユーザーごとの crontab 分離。マクロ @hourly / @daily / @weekly は 5 フィールド表現と並んで受け入れられます。

3 つのカデンス、3 つの cron 行、定額制のサーバー月額 $29/月から。

毎時@hourly bash /scripts/scrape.sh競合価格 → sqlite
日次0 9 * * * bash /scripts/digest.sh9 時 — 差分をロールアップ
週次0 0 * * 0 bash /scripts/archive.sh日曜 — parquet をファイルへ
before · 3 つの lambda、3 つの請求after · 1 つの定額制のサーバー、多くの cron 行
cron ドキュメントを読む

これが置き換えるもの

3 つの Lambda、3 つの GitHub Actions、3 つの ECS スケジュールタスク — 3 つのカデンスのために手が伸びる標準的なスタック。それぞれが呼び出しごとまたは呼び出しごとに課金します。Hoody はサーバーの料金を請求します。

  • 3 つの AWS Lambda 関数ディスク上の 3 つのシェルスクリプトにすぎないものに、呼び出しごとの課金
  • 3 つの GitHub Actions スケジュール5 秒の SQLite クエリのために起動される CI ランナー全体
  • 3 つの Sidekiq ワーカーディスク以外の状態を共有しないジョブのための Redis ベースのワーカープール
  • 3 つのサーバーレス関数 / 3 つの請求同じロジックのための 3 つのデプロイ、3 つのログ、3 つの料金メーター
  • マルチサービスオーケストレーション (Airflow、Step Functions)3 つのノード間にエッジが 1 つもないグラフのための DAG エンジン
  • 3 つの ECS スケジュールタスク3 つのタスク定義、3 つの IAM ロール、3 つの CloudWatch ルール

スケジューラを借りるのをやめましょう。スケジュールをファイルに書き込んでください。コンテナはすでに cron を実行しています — 3 行後にはパイプライン全体が出荷できます。

cron ドキュメントを読む

他のユースケースを読む