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、ログ、状態、履歴。
一般的な代替手段
システムログとチーム内慣習。
詳細
それぞれの強みと向き不向き
依存関係が出ると cron はすぐ苦しくなる
リトライ、出力保存、実行順序、履歴が必要になった瞬間に、cron はラッパースクリプトの集合になりがちです。
- 各コマンドを名前付きステップに分ける
- 長いシェルチェーンの代わりに依存関係を使う
- 失敗出力を確認して Web UI から再実行する
大きな移行は不要
Dagu は既存スクリプトをそのまま動かします。最初の移行は 1 つの夜間ジョブからで十分です。
- Bash、Python、Go、Java、PHP、Perl をそのまま使える
- スケジュールをバージョン管理された YAML に移せる
- タイムアウトやリトライを少しずつ足せる
運用の見える化を最初から持つ
cron では syslog や独自ファイルに散る実行状態を、Dagu は一か所に集めます。
- 現在状態、履歴、ログをまとめて見られる
- サーバーに入らず手動実行できる
- 通知や後続ステップで障害対応を組める
FAQ
Dagu を導入する前によくある質問
Dagu は cron 構文を使えますか?
はい。cron 式でスケジュールしつつ、実行状態やステップ制御をワークフロー側で持てます。
cron スクリプトを書き換える必要はありますか?
いいえ。既存コマンドを Dagu のステップに置き、必要に応じて依存関係、リトライ、通知を追加するだけです。
Kubernetes は必要ですか?
不要です。普通の 1 台のマシンで開始でき、必要になったら分散実行へ拡張できます。
次の一歩
まず 1 つのワークフローから。
Dagu をインストールし、不安定なスクリプトやエージェントタスクを 1 つ YAML に移して、実際の実行履歴を見て判断できます。