什么是 Dagu?
Dagu 是一个用单一二进制文件构建的轻量级工作流引擎,带有现代化的 Web UI。以简单、声明式的 YAML 格式定义任何工作流,并按计划执行任意工作流。原生支持 shell 命令、通过 SSH 的远程执行和 docker 镜像。Dagu 是 Cron、Airflow、Rundeck 等的轻量级替代品。
工作原理
Dagu 执行您在 YAML 文件中定义为一系列步骤的工作流。这些步骤形成一个有向无环图 (DAG),确保清晰可预测的执行流程。
例如,一个简单的顺序 DAG:
yaml
steps:
- echo "Hello, dagu!"
- echo "This is a second step"
带并行步骤的 DAG:
yaml
steps:
- echo "Step 1"
-
- echo "Step 2a - runs in parallel"
- echo "Step 2b - runs in parallel"
- echo "Step 3 - waits for parallel steps"
或者带显式依赖的 DAG:
yaml
steps:
- name: step 1
command: echo "Hello, dagu!"
- name: step 2
command: echo "This is a second step"
depends: step 1
演示
CLI 演示:创建一个简单的工作流并使用命令行界面执行它。
Web UI 演示:使用 Web 界面创建和管理工作流,包括实时监控和控制。
何时使用 Dagu
完美适用于:
- 数据管道和 ETL
- DevOps 自动化
- 调度任务和批处理
- 用可管理的东西替代 cron
- 本地开发和测试
不太适合:
- 亚秒级调度需求
- 实时流处理
快速对比
功能 | Cron | Airflow | Dagu |
---|---|---|---|
依赖关系 | ❌ 手动 | ✅ 仅 Python | ✅ 任何语言 |
监控 | ❌ 日志文件 | ✅ Web UI | ✅ Web UI |
设置时间 | ✅ 几分钟 | ❌ 几小时/几天 | ✅ 几分钟 |
基础设施 | ✅ 无 | ❌ 数据库、队列 | ✅ 无 |
错误处理 | ❌ 手动 | ✅ 内置 | ✅ 内置 |
调度 | ✅ 基础 | ✅ 高级 | ✅ 高级 |