ダイジェストメール、請求処理、トライアルスイープ

SaaS が依存する定期ジョブを確実に実行し、失敗時にはリトライとアラートで対応します。

問題点

すべての SaaS には、静かに重要な役割を果たしているスケジュールジョブがあります。週次ダイジェスト、毎晩の請求消込、トライアル期限スイープ、使用量ロールアップなどです。そのひとつがサイレントに停止しても、ダッシュボードからは気づきません — 怒った顧客や1ヶ月後の収益の欠損から気づくことになります。

SteadyCron による解決方法

  1. 1 各ジョブをアプリの内部エンドポイントへの HTTP 呼び出しとして定義し、ヘッダートークンで保護します。
  2. 2 適切なタイムゾーンでスケジュールを設定します(請求日が DST でずれないようにします)。
  3. 3 リトライを設定し、短時間のデータベース障害で請求処理全体がスキップされないようにします。
  4. 4 失敗または連続失敗時にアラートを受け取り、復旧時には自動解決されます。
jobs:
  - name: weekly-digest-email
    kind: http
    method: POST
    url: https://api.myapp.com/jobs/digest
    schedule: "0 9 * * 1"
    timezone: Europe/Berlin
    retries: 3
  - name: trial-expiry-sweep
    kind: http
    method: POST
    url: https://api.myapp.com/jobs/trial-expiry
    schedule: "0 6 * * *"
    timezone: Europe/Berlin
app.steadycron.com/jobs

Jobs

New job
Search jobs…
All HTTP Heartbeat
Status Group: env
env:prod 5 jobs 1 failing
weekly-digest-email HTTP 0 9 * * 1 in 2 days 3 days ago
nightly-db-backup Heartbeat 0 2 * * * in 19 h 5 h ago
stripe-reconciliation HTTP 0 */4 * * * in 38 min 3 h ago
cache-warmup HTTP */15 * * * * in 11 min now
search-index-sync Heartbeat */30 * * * * in 6 min 24 min ago
env:dev 3 jobs
seed-test-data HTTP 0 4 * * * in 14 h 10 h ago
preview-env-cleanup Heartbeat 0 */6 * * * in 2 h 4 h ago
trial-expiry-sweep HTTP 0 6 * * * yesterday

すべてのジョブのステータス、スケジュール、最終実行 — ひと目でわかる。

バージョン管理に置く

すべてのスケジュールジョブを YAML マニフェストで定義し、CI から steadycron sync jobs.yaml で同期します。ステージングと本番のスケジュールが同一に保たれ、変更は他のコードと同様にレビューを経て適用されます。

フリート全体をひとつの場所で

実行と監視がダッシュボードを共有しているため、SteadyCron で実行しているダイジェストとハートビートで監視しているバックアップが並んで表示されます — スケジュールされているすべてのものをひとつのステータス画面で確認できます。

関連ドキュメント

気づいたときには手遅れにならないために

無料プランで始めましょう — クレジットカード不要。

無料で始める