監視・再試行・Git 管理できる
cron ジョブ

cron ジョブのスケジュール・実行・監視をひとつの場所で — Infrastructure as Code ファースト、EU ホスティング。

無料プラン — クレジットカード不要。

すべてのコンポーネントと、その実行場所

ドイツの Hetzner VM 上で EU ホスティング、Cloudflare の背後で稼働。システム全体が一つのビューに収まり、サブプロセッサは Cloudflare・Paddle・SMTP2GO のみです。

クライアント

Browser

steadycron.com

ランディング & ドキュメント

Browser

app.steadycron.com

ダッシュボード UI

CLI / scripts

api.steadycron.com

REST + マニフェスト

Your cron

ping.steadycron.com

ハートビート ping

Cloudflare

DNS · TLS · WAF · CDN

すべての前段に立つエッジプロキシ・ファイアウォール・レート制限。

Cloudflare Pages

Astro · static

このサイトはエッジから配信 — VM には一切触れません。

Caddy

reverse proxy

VM 上で自動 TLS。app. / api. / ping. を各コンテナへルーティング。

Hetzner VM · ドイツ · Docker Compose

Dashboard

steadycron-dashboard

Next.js。認証付き UI。内部ネットワーク経由で API を呼び出します。

API + Ping

steadycron-api · .NET

REST · ping 取り込み · cron プレビュー · テンプレート変数 · アクティビティ · 管理。

steadycron-scheduler · Quartz.NET clustered

HTTP executor

Polly · SSRF guard

予定された HTTPS 呼び出しを実行 — リトライ・タイムアウト・リダイレクト再検証。

Heartbeat watcher

30s tick

猶予期間に照らして、未達・ハングした実行を検出。

Alert dispatcher

outbox · NOTIFY

アウトボックスを処理し、整形・配信・再送します。

Background workers

×4 services

配信フラッシュ、異常検知、保持データの削除、Paddle 照合。

PostgreSQL 17

app · Quartz · outbox

すべてを 1 インスタンスで。LISTEN/NOTIFY がブローカーを代替 — Redis 不要。

Backups

nightly · encrypted

暗号化した pg_dump をオフサイト保管。四半期ごとに復元訓練。

外部サービスとお客様のシステム

Your endpoints

the jobs we call

スケジュールに従って呼び出される、お客様の HTTPS ハンドラ。

Alert channels

Slack · Discord · …

Telegram・Webhook・メール — 送信のみ。

Paddle

billing · MoR

Merchant of Record — 税務を代行。カード情報はここにありません。

SMTP2GO

email

確認メール、パスワード再設定、メールアラート。

可観測性 · OpenTelemetry → セルフホスト Grafana Infrastructure as Code · Terraform (Cloudflare + Hetzner) スケジューリング · Quartz.NET クラスタ構成 (AdoJobStore)

HTTP ジョブ実行

SteadyCron がスケジュール通りにエンドポイントを呼び出します。あなたはハンドラに集中するだけ。単なる URL 欄ではなく本物のリクエストビルダーで、システム cron では自前で用意する制御をまとめて提供します。

  • 任意のメソッド — GET・POST・PUT・PATCH・DELETE — をカスタムヘッダーと JSON ボディで
  • テンプレート変数: URL・ヘッダー・ボディに {{var}} を埋め込み、実行時にサーバー側で解決
  • env:prod や team:backend などのタグでジョブを整理し、ダッシュボードをタグで分類・絞り込み
  • 指数バックオフによる設定可能なリトライ — しかも選んだステータスコードだけで再試行
  • ジョブごとのタイムアウトと「実行中はスキップ」で、遅い実行が次に重なりません
  • ジョブごとのタイムゾーンと正確な夏時間処理 — 現地時間で設定し、一年中正しく実行
  • すべての実行を完全に記録: レスポンスステータス・ボディ・所要時間を監査用に保持
  • 今すぐ実行・一時停止・再開を UI から — または YAML / CLI でジョブ全体を同期
app.steadycron.com/jobs/new
invoice-send

Request

Configure the HTTP request sent on each execution. Use {{variable}} for template substitution.

POST
{{baseUrl}}/v1/invoices/{{invoiceId}}/send
Send
Params Headers 1 Body

Headers

Authorization Bearer {{apiToken}}
Body raw · JSON
{
  "account_id": "{{accountId}}",
  "amount_cents": 4900,
  "send_email": true
}

Valid JSON

Schedule

When it runs — cron or interval, with DST-correct timezones and a live next-runs preview.

Cron Interval

Cron expression

0 9 * * 1-5

Weekdays at 09:00

Timezone

Europe/Berlin

Next runs

Mon 09:00Tue 09:00Wed 09:00Thu 09:00
timeout 30sretries 3skip if still running

ハートビート監視

すでにどこかで動かしている cron ジョブを監視します。ジョブが ping を送り、SteadyCron が時刻を見張ります。ping が届かない場合 — プロセスのクラッシュ、サーバー再起動、ジョブのハング — ユーザーより先にあなたが気づけます。

  • あらゆる cron・スクリプト・ワーカーのデッドマンスイッチ — どの言語・シェルからでも
  • /start のあと /success または /fail を ping し、所要時間を計測して途中で死んだジョブを検出
  • グレースピリオドが通常のばらつきを吸収し、本当に遅れたときだけアラート
  • 3 種類の障害を検出: 実行漏れ、明示的な失敗、終わらないスタックジョブ
  • 各チェックに安定した ping URL — ジョブを自由に改名してもスクリプトはそのまま動作
  • メール・Slack・Discord・Telegram・Webhook でアラート — 復旧で自動的に解消
  • タグで分類・絞り込み — 障害のある環境がリストの先頭に表示
  • 統合はわずか 1 行: ジョブの最後で ping URL に curl するだけ
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

すべてをコードで定義

アカウント全体 — ジョブ、ハートビート、チャネル、タグ、変数 — をバージョン管理された 1 つの YAML マニフェストで宣言。CLI からも CI からも同期できます。

  • バージョン管理された 1 つの YAML マニフェストで、ジョブ・ハートビート・チャネル・タグ・変数を定義
  • 既存アカウントも数秒で取り込み — steadycron export がマニフェスト化
  • validate → plan → apply。Terraform 風の差分をプルリクエストでレビュー
  • --prune は削除分を反映、namespace で IaC とクリック操作のジョブを安全に分離
  • 安定した ID — 名前変更は名前変更のまま、再作成なし。ハートビート URL も維持
  • シークレットは Git に入れない: ${ENV} は CLI、{{template}} はサーバーが解決
  • GitHub Action が PR ごとにプランを投稿し、merge で適用
  • CLI でできることはすべて REST API でも — スコープ付き・読み取り専用・フルキー対応
steadycron — bash
$ steadycron jobs list
╭────────────────┬───────────┬─────────┬────────────────────┬──────────┬──────────╮
Name Kind Status Schedule Next run Last run
├────────────────┼───────────┼─────────┼────────────────────┼──────────┼──────────┤
weekly-digest http success 0 9 * * 1 (UTC) in 2d 3d ago
nightly-backup heartbeat late 0 2 * * * (UTC) 5h ago
stripe-recon http failure 0 */4 * * * (UTC) in 38m 3h ago
cache-warmup http running */15 * * * * (UTC) in 11m now
search-sync heartbeat success */30 * * * * (UTC) 24m ago
report-export http success 0 6 * * * (UTC) in 14h 10h ago
token-refresh http success 0 */6 * * * (UTC) in 2h 4h ago
trial-sweep http paused 0 6 * * * (UTC) 1d ago
╰────────────────┴───────────┴─────────┴────────────────────┴──────────┴──────────╯
8 job(s).
$ steadycron cron preview "0 9 * * 1-5" --timezone Europe/Berlin
Next 5 fires of 0 9 * * 1-5 (Europe/Berlin):
╭───┬───────────────────────────┬──────────╮
# Fire time (Europe/Berlin) Relative
├───┼───────────────────────────┼──────────┤
1 2026-06-08 09:00:00 in 3d
2 2026-06-09 09:00:00 in 4d
3 2026-06-10 09:00:00 in 5d
4 2026-06-11 09:00:00 in 6d
5 2026-06-12 09:00:00 in 7d
╰───┴───────────────────────────┴──────────╯
$ steadycron jobs run cache-warmup
triggered cache-warmup · 200 OK · 412 ms
$ steadycron validate manifests/production.yaml
manifest valid · 0 errors
$ steadycron plan manifests/production.yaml
~ weekly-digest update retries: 2 → 3
+ invoice-reminder create kind: http · 0 17 * * 5
- legacy-report destroy (absent from manifest)
Plan: 1 to add · 1 to change · 1 to destroy
$ steadycron apply --prune manifests/production.yaml
apply complete · 1 added · 1 changed · 1 destroyed

よくある質問

データはどこに保存されますか?

すべてドイツの Hetzner インフラで稼働し、ドイツ法に準拠しています。コア実行に US サブプロセッサは使用しておらず、GDPR DPA も利用可能です。

自分のサーバーで動いている cron ジョブを監視できますか?

はい。ハートビートチェックを追加し、ジョブが完了したら ping を送信するように設定してください(スクリプトの末尾に curl を1行追加するだけ)。ping がスケジュール通りに届かない場合、SteadyCron がアラートを送ります。任意の言語やシェルから動作します。

SteadyCron は AWS EventBridge や Cloudflare/Vercel Cron の代替になりますか?

スケジュールされた HTTP 処理については、はい。SteadyCron は設定可能なリトライ、タイムアウト、完全なリクエスト/レスポンスログでエンドポイントをスケジュール通りに呼び出します — 特定のクラウドに縛られることなく。監視とアラートも同じ場所で行えます。

Healthchecks.io との違いは何ですか?

Healthchecks はハートビート監視に優れています。SteadyCron は両方を行います — HTTP ジョブの実行とハートビートの監視をひとつのダッシュボードで — EU ホスティングで Infrastructure as Code ワークフロー付きです。

無料プランはありますか?

はい — HTTP ジョブ4つとハートビートチェック12個が永久無料で、クレジットカード不要です。有料プランは月額 €10 から。

ジョブをコードで定義できますか?

はい。YAML マニフェストでジョブを定義し、CLI で steadycron sync jobs.yaml を実行して同期するか、REST API を直接使用できます。クリック操作なし、環境間のドリフトなし。