SaaS ジョブ
ダイジェストメール、請求処理、トライアルスイープ
SaaS が依存する定期ジョブを確実に実行し、失敗時にはリトライとアラートで対応します。
問題点
すべての SaaS には、静かに重要な役割を果たしているスケジュールジョブがあります。週次ダイジェスト、毎晩の請求消込、トライアル期限スイープ、使用量ロールアップなどです。そのひとつがサイレントに停止しても、ダッシュボードからは気づきません — 怒った顧客や1ヶ月後の収益の欠損から気づくことになります。
SteadyCron による解決方法
- 1 各ジョブをアプリの内部エンドポイントへの HTTP 呼び出しとして定義し、ヘッダートークンで保護します。
- 2 適切なタイムゾーンでスケジュールを設定します(請求日が DST でずれないようにします)。
- 3 リトライを設定し、短時間のデータベース障害で請求処理全体がスキップされないようにします。
- 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
Export all as manifest
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 で実行しているダイジェストとハートビートで監視しているバックアップが並んで表示されます — スケジュールされているすべてのものをひとつのステータス画面で確認できます。
関連ドキュメント
気づいたときには手遅れにならないために
無料プランで始めましょう — クレジットカード不要。
無料で始める