Cron 代替

cron の手軽さを保ちつつ、本番運用に必要な制御を足す。

Dagu は、スクリプトに近い形でスケジュールを維持しながら、依存関係、リトライ、ログ、履歴、手動再実行、Web UI を追加します。

cron 1 行をワークフローへ
name: nightly-ops
schedule: "0 2 * * *"

steps:
  - id: extract
    run: python scripts/extract.py

  - id: transform
    run: ./bin/transform
    retry_policy:
      limit: 3
    depends: [extract]

  - id: notify
    run: ./scripts/slack-success.sh
    depends: [transform]

YAML で cron 風スケジュール

シェル連結の代わりにステップ依存

SSH なしで失敗ステップを再実行

Web UI で履歴とログを確認

一目で比較

Cron と Dagu の違い

依存関係
Dagu

ステップグラフとして表現。

一般的な代替手段

シェルチェーン、lock file、ラッパースクリプト。

リトライ
Dagu

ステップ単位でポリシー化。

一般的な代替手段

自前ループか手動再実行。

可視性
Dagu

Web UI、ログ、状態、履歴。

一般的な代替手段

システムログとチーム内慣習。

詳細

それぞれの強みと向き不向き

01

依存関係が出ると cron はすぐ苦しくなる

リトライ、出力保存、実行順序、履歴が必要になった瞬間に、cron はラッパースクリプトの集合になりがちです。

  • 各コマンドを名前付きステップに分ける
  • 長いシェルチェーンの代わりに依存関係を使う
  • 失敗出力を確認して Web UI から再実行する
02

大きな移行は不要

Dagu は既存スクリプトをそのまま動かします。最初の移行は 1 つの夜間ジョブからで十分です。

  • Bash、Python、Go、Java、PHP、Perl をそのまま使える
  • スケジュールをバージョン管理された YAML に移せる
  • タイムアウトやリトライを少しずつ足せる
03

運用の見える化を最初から持つ

cron では syslog や独自ファイルに散る実行状態を、Dagu は一か所に集めます。

  • 現在状態、履歴、ログをまとめて見られる
  • サーバーに入らず手動実行できる
  • 通知や後続ステップで障害対応を組める

FAQ

Dagu を導入する前によくある質問

Dagu は cron 構文を使えますか?

はい。cron 式でスケジュールしつつ、実行状態やステップ制御をワークフロー側で持てます。

cron スクリプトを書き換える必要はありますか?

いいえ。既存コマンドを Dagu のステップに置き、必要に応じて依存関係、リトライ、通知を追加するだけです。

Kubernetes は必要ですか?

不要です。普通の 1 台のマシンで開始でき、必要になったら分散実行へ拡張できます。

次の一歩

まず 1 つのワークフローから。

Dagu をインストールし、不安定なスクリプトやエージェントタスクを 1 つ YAML に移して、実際の実行履歴を見て判断できます。