
轻量级工作流引擎,Airflow 和 Cron 的替代方案
单一二进制文件,带有 Web UI。在计划上执行以简单、声明性 YAML 定义的工作流。原生支持 shell 命令、SSH 远程执行和 docker 镜像。
快速开始
在不到 2 分钟内安装并运行您的第一个工作流。
安装
bash
# 安装到 ~/.local/bin(默认,无需 sudo)
curl -L https://raw.githubusercontent.com/dagu-org/dagu/main/scripts/installer.sh | bash
# 安装特定版本
curl -L https://raw.githubusercontent.com/dagu-org/dagu/main/scripts/installer.sh | bash -s -- --version v1.17.0
# 安装到自定义目录
curl -L https://raw.githubusercontent.com/dagu-org/dagu/main/scripts/installer.sh | bash -s -- --install-dir /usr/local/bin
bash
docker pull ghcr.io/dagu-org/dagu:latest
bash
brew update && brew install dagu
bash
npm install -g --ignore-scripts=false dagu
1. 创建工作流
bash
mkdir -p ~/.config/dagu/dags && cat > ~/.config/dagu/dags/hello.yaml << 'EOF'
steps:
- echo "Hello from Dagu!"
- echo "Running step 2"
EOF
bash
mkdir -p ~/.dagu/dags && cat > ~/.dagu/dags/hello.yaml << 'EOF'
steps:
- echo "Hello from Dagu!"
- echo "Running step 2"
EOF
2. 运行它
bash
dagu start hello
bash
docker run --rm \
-v ~/.dagu:/var/lib/dagu \
ghcr.io/dagu-org/dagu:latest \
dagu start hello
输出:
┌─ DAG: hello ─────────────────────────────────────────────────────┐
│ Status: Success ✓ | Started: 23:34:57 | Elapsed: 471ms │
└──────────────────────────────────────────────────────────────────┘
Progress: ████████████████████████████████████████ 100% (2/2 steps)
注意:如果您使用的是 Docker,输出可能会有所不同。
:::
3. 检查状态
bash
dagu status hello
bash
docker run --rm \
-v ~/.dagu:/var/lib/dagu \
ghcr.io/dagu-org/dagu:latest \
dagu status hello
4. 启动 UI
bash
dagu start-all
bash
docker run -d \
-p 8080:8080 \
-v ~/.dagu:/var/lib/dagu \
ghcr.io/dagu-org/dagu:latest \
dagu start-all
访问 http://localhost:8080 查看您的工作流。
为什么选择 Dagu?
零依赖
单一二进制文件。无需数据库,无需消息代理。几秒钟内部署到任何地方。
语言无关
执行任何命令。您的现有脚本无需修改即可工作。
生产就绪
经过实战检验的错误处理、重试、日志记录和监控。
分层工作流
由较小的工作流组成工作流。构建模块化、可重用的组件。
示例:带嵌套工作流的数据管道
yaml
schedule: "0 2 * * *" # 每天凌晨 2 点
steps:
- command: python extract.py --date=${DATE}
output: RAW_DATA
- run: transform-data
parallel:
items: [customers, orders, products]
params: "TYPE=${ITEM} INPUT=${RAW_DATA}"
- command: python load.py
retryPolicy:
limit: 3
intervalSec: 2
backoff: true # 指数退避
---
name: transform-data
params: [TYPE, INPUT]
steps:
- python transform.py --type=${TYPE} --input=${INPUT}
了解更多
社区
本站为 Dagu 中文文档。内容基于最新 Dagu 英文文档 翻译。
Dagu 中文文档由 Dagu.dev 维护,致力推动 Dagu 在中文社区的传播与技术交流。
Dagu 项目归属 https://github.com/dagu-org 所有,