Skip to content
dagu Logo

轻量级工作流引擎,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}

了解更多

入门指南

安装和第一个工作流

编写工作流

完整的工作流创作指南

YAML 参考

所有配置选项

社区

本站为 Dagu 中文文档。内容基于最新 Dagu 英文文档 翻译。

Dagu 中文文档由 Dagu.dev 维护,致力推动 Dagu 在中文社区的传播与技术交流。

Dagu 项目归属 https://github.com/dagu-org 所有,

根据 MIT 许可证发布。