Dagu 2.21.0 介绍与选型指南
Dagu 是 Go 编写的单二进制工作流编排器:YAML 声明 DAG,无需外部数据库,内置调度、重试、邮件/Webhook 告警与 Web UI。本文基于官方公开资料介绍其定位、架构与功能,并与 Cron 原生、Cronicle、Apache Airflow、Taskfile 做社区活跃度/版本节奏/兼容矩阵量化对比(版本 v2.21.0,2026-10-19 实查)。
Dagu 2.21.0 介绍与选型指南
目标:面向「用脚本/命令干活的团队需要一个轻量调度层」的诉求,介绍开源工作流引擎 Dagu 的定位、架构、功能与选型依据,并与 Cron 原生、Cronicle、Apache Airflow、Taskfile 做量化对比。本文为认知篇,全部信息基于官方公开资料(GitHub Releases 与官方文档站 docs.dagu.sh),关键数据标注来源与查询日期(2026-10-19),不含本地安装实测(安装实测见《Ubuntu 22.04 安装 Dagu 2.21.0 指南》一篇)。
一、环境信息
本章说明本文的信息基准,包括查询日期、版本依据与官方来源清单,便于读者核对时效性。
- 信息查询日期:2026-10-19。
- 版本依据:Dagu 最新稳定 Release 为 v2.21.0(2026-10-18 发布,非 Pre-release),来源 GitHub Releases(仓库
dagucloud/dagu,查询接口https://api.github.com/repos/dagucloud/dagu/releases)。 - 仓库地址:
https://github.com/dagucloud/dagu。⚠️ 该仓库经历过两次组织迁移:早期为yohamta/dagu(原作者个人仓库),后迁移至dagu-dev/dagu,2026 年再迁移至dagucloud/dagu(2026-10-19 实查:访问旧地址 GitHub API 返回 301 重定向到dagucloud/dagu,三个地址均指向同一仓库)。 - 官方文档站:
https://docs.dagu.sh/;官网首页:https://dagu.sh/。 - 实查仓库元数据(GitHub API,2026-10-19):Stars 4383、Forks 379、Open Issues 108、主语言 Go、许可证 GPL-3.0、仓库创建于 2022-04-22、最近推送 2026-10-18。
二、软件概述
Dagu 是一个用 Go 编写、以单个二进制分发的自托管工作流编排器(workflow orchestrator),官方一句话定位:「Self-hostable workflow orchestrator for teams whose main work isn't orchestration」(面向「主业不是编排」的团队的自托管编排器,来源:GitHub 仓库 description,2026-10-19 实查)。
它解决的核心问题是:团队已有大量能正常工作的脚本、命令、容器任务,缺的是围绕它们的「调度外壳」——定时触发、依赖编排、失败重试、日志留存、执行历史与一个可视化 Web UI。Dagu 把这层外壳做进一个声明式 YAML 文件里,业务脚本本身零改造:
- 单二进制、无外部数据库:状态(执行历史、队列、用户)落在本地文件,不要求部署 PostgreSQL/MySQL 等元数据库,官方文档明确「One binary, no external database」(docs.dagu.sh 首页,2026-10-19 查询)。
- YAML 声明 DAG:一个 YAML 文件即一个工作流(DAG),
steps字段声明步骤与depends依赖关系,Dagu 按依赖图并行调度无依赖的步骤。 - 从 Cron 替代品长成编排器:项目早期定位是「带 Web UI 的 Cron 替代品」,v2.x 已扩展出分布式执行(coordinator/worker)、子工作流、参数化调度、人工任务(human-in-the-loop)、AI/LLM 步骤等能力,但仍保持单机可用的最小形态。
- 项目吉祥物为智利八齿鼠(degu),名字呼应其核心工作单元 DAG(有向无环图)。
💡 说明:DAG(Directed Acyclic Graph,有向无环图)是工作流引擎的通用抽象:节点=任务步骤,边=依赖关系,「无环」保证执行顺序不会死循环。Dagu、Airflow、Cronicle 等编排器都以 DAG 为第一建模对象,区别在于 DAG 的定义方式(YAML/Python 代码/Web 表单)与执行引擎的重量级。
三、核心架构
本节按官方文档与仓库代码结构概述 Dagu 的组件模型(来源:docs.dagu.sh「Deployment models」与仓库 README,2026-10-19 查询)。
3.1 单进程形态(start-all)
最小部署只有一个进程:dagu start-all 同时拉起三个内嵌组件:
- Web UI Server:内嵌 HTTP 服务(默认端口 8080),提供 DAG 列表、依赖图可视化、执行历史、步骤日志查看、YAML 在线编辑与手动触发。
- Scheduler:常驻调度器,扫描各 DAG 的 cron 表达式(
schedule字段)到点触发执行,支持时区(CRON_TZ)、重叠策略(overlap_policy)与停机补跑窗口(catchup_window)。 - Coordinator(可选):分布式模式下的任务协调 gRPC 服务,配合独立
dagu worker进程实现跨机分发。
3.2 状态与目录
Dagu 不依赖外部数据库,状态按目录约定落盘(以服务端 DAGU_HOME=/var/lib/dagu 为例):
| 路径 | 内容 |
|---|---|
$DAGU_HOME/dags/ | DAG YAML 定义文件,一个 .yaml 一个工作流 |
$DAGU_HOME/logs/ | 按 DAG 名/dag-run 分目录的执行日志(stdout/stderr 分离) |
$DAGU_HOME/data/ | 内置状态库(执行历史、用户、队列、通知、凭据等子目录) |
/etc/dagu/dagu.env | 服务端环境变量(DAGU_HOME/DAGU_HOST/DAGU_PORT 等) |
3.3 执行器与扩展点
步骤(step)除本地 shell 命令(run:)外,支持内置 action: 执行器:dag.run(子工作流)、http.request、ssh(远程执行)、s3、redis、docker.run、template.render、file.read、clickhouse.query(v2.21 新增)以及 LLM/浏览器步骤(v2.21 增强)。扩展机制均通过 YAML 声明,无需写代码(来源:docs.dagu.sh Step Types 章节与 v2.21.0 Release Notes)。
四、功能特性
依据官方文档站(docs.dagu.sh,2026-10-19 查询)与 v2.21.0 Release Notes,核心能力归纳如下:
| 能力域 | 说明 |
|---|---|
| 依赖编排 | steps[].depends 声明依赖,无依赖步骤自动并行;type: graph(依赖图)或 type: chain(顺序链) |
| 定时调度 | 标准 cron 表达式 + CRON_TZ 时区;停机补跑(catchup_window,最多回放 1000 个错过的间隔);重叠策略 skip/all/latest |
| 失败重试 | 步骤级 retry_policy(次数/间隔/指数退避/指定退出码)、DAG 级 retry、失败自动重试扫描器 |
| 通知告警 | 邮件(SMTP,支持 Microsoft 365/Google OAuth)、Webhook 路由、每 DAG 入站 Webhook 触发(可配公网 URL 供 GitHub/Stripe/Slack 回调) |
| 人工任务 | wait 状态 + 审批邮件,人工放行后继续执行(human-in-the-loop) |
| 子工作流 | action: dag.run 调用子 DAG,支持参数传递、列表展开并行(parallel.items + 并发上限)、嵌套运行独立追踪 |
| 执行器生态 | http/ssh/s3/redis/docker/clickhouse/LLM/浏览器步骤;命令、容器、K8s Job、SQL、远程脚本统一编排 |
| 可观测 | Web UI 实时状态、步骤级日志、执行历史、重试面板;内置 MCP 端点(/mcp)供 AI 客户端查询与触发;可选 Dagu Console 云监控(免费档单服务器) |
| 安全 | 内置用户体系(JWT Bearer 认证)、TLS 证书加载、v2.21 起凭据类环境变量默认不透传步骤环境(需经 secrets 显式申请) |
| 分发形态 | 单二进制覆盖 linux amd64/arm64/armv6/armv7/386/ppc64le/s390x、macOS(amd64/arm64)、Windows(amd64/arm64/386),另有 Homebrew/npm/Docker/Kubernetes(Helm) 安装路径(v2.21.0 Release Assets 实查 15 个资产) |
五、快速上手
以下为官方文档(docs.dagu.sh 首页 Quick Start,2026-10-19 查询)给出的最小示例,本文不做本地实测(安装实测见 B1 篇),读者可对照官方页面验证。
安装(官方脚本,Linux/macOS):
curl -fsSL https://raw.githubusercontent.com/dagucloud/dagu/main/scripts/installer.sh | bash
定义第一个工作流(官方示例 first-workflow.yaml):
steps:
- id: checkout
run: echo "code checked out"
- id: test
depends: checkout
run: echo "tests passed"
- id: build
depends: checkout
run: echo "build ready"
- id: package
depends: [test, build]
run: echo "package created"
启动调度器与 Web UI:
dagu start-all --dags .
打开 http://localhost:8080 即可在 UI 中触发:test 与 build 在 checkout 之后并行执行,package 等待两者全部完成。依赖图、每步日志与完整执行历史均在 UI 内呈现(来源:docs.dagu.sh「Run your first workflow」)。
六、适用场景与限制
6.1 适用场景
- 替换散落各处的 crontab:把 crontab 里的裸命令迁到带依赖、重试、日志与 UI 的 DAG,单机即可完成,无需新数据库。
- 数据管道与 ETL 轻量编排:抽取→清洗→加载的依赖链,配合重试与补跑窗口;SQL 步骤直连 ClickHouse 等数据源。
- 运维自动化与巡检:定时备份、证书续期、多机 SSH 巡检,失败时邮件/Webhook 告警(可与钉钉/企微机器人衔接)。
- AI/智能体任务编排:把 LLM 调用、编码代理(coding agent)、浏览器自动化作为步骤纳入带审计的工作流(v2.21 重点方向)。
6.2 限制与注意
- 单机状态存储:执行历史与队列落在本地文件,多实例共享需依赖共享卷(v2.21 起支持 NFS/EFS/CephFS 上的 DAG 变更感知),不建议超大规模多租户场景——那是 Airflow 类平台的主场。
- GPL-3.0 许可证:对以 Dagu 为核心做闭源分发(而非独立使用)的商业场景有传染性约束,集成前需法务评估。
- 社区规模中等:4383 Stars(2026-10-19 实查),远小于 Airflow(47214)与 Taskfile(16262),遇到深度问题可依赖的社区答案存量较少,需更多依靠官方 Discord 与 Issues。
- Cron 语义子集:调度为标准 5 段 cron + 时区前缀,不支持 Cron 的高级特性(如
@reboot之外的扩展语法需逐项核对文档)。
七、同类选型对比
本节对「Linux 定时任务/工作流编排」同类组件做量化对比。数据均为 2026-10-19 实查 GitHub API/Releases,标注各组件官方最新稳定版本。
7.1 量化对比总表
| 维度 | Dagu 2.21.0 | Cron 原生(crontab) | Cronicle 0.9.137 | Apache Airflow 3.3.2 | Taskfile (go-task) v3.54.0 |
|---|---|---|---|---|---|
| 定位 | 单机→分布式的 YAML DAG 编排器 | 系统自带定时执行器 | 分布式任务调度 Web UI | 重量级数据编排平台 | 构建任务运行器(非调度器) |
| GitHub Stars(2026-10-19) | 4383 | —(内核组件) | 5859 | 47214 | 16262 |
| 最新版本/发布节奏 | v2.21.0(2026-10-18);2026-09-09~10-18 约 40 天发布 14 个版本,节奏极快 | 随发行版 | v0.9.137(2026-10-16);长期 0.9.x 小步迭代 | 3.3.2;月度级大版本+周级补丁 | v3.54.0;周级迭代 |
| 语言/运行时 | Go,静态单二进制 | C(vixie-cron) | JavaScript(Node.js) | Python(需 3.x 运行时) | Go,静态单二进制 |
| 外部依赖 | 无(本地文件状态) | 无 | Node.js + 存储插件(默认 LevelDB) | 元数据库(PostgreSQL/MySQL)+ 消息队列(Celery/Scheduler 多进程) | 无 |
| Web UI | 有(含 DAG 图、日志、历史、编辑器) | 无 | 有(实时日志、多机) | 有(功能最全的编排 UI) | 无(仅 CLI) |
| 依赖编排 | DAG 依赖图 + 并行 | 无(纯时间触发) | 事件/链式(有限 DAG 能力) | 完整 DAG(Python 定义) | 任务间依赖(deps),无调度语义 |
| 定时调度 | cron + 时区 + 补跑 | cron(事实标准) | cron | cron + timedelta + 数据集触发 | 无(需外接 cron/CI) |
| 失败重试 | 步骤/DAG 级策略化重试 | 无 | 失败重试(web 配置) | 完整重试策略 | 无 |
| 通知告警 | 邮件/Webhook/Console | 无(需自研脚本) | 内置 Webhook + 插件 | 邮件/Slack 等丰富生态 | 无 |
| 许可证 | GPL-3.0 | 多种(BSD/MIT 系) | 自定义(NOASSERTION,源码可得但非标准 OSI) | Apache-2.0 | MIT |
| 典型资源占用 | 单进程,二进制 ~173MB,常驻内存 ~130MB(2.21.0 实测参考) | 极低 | Node 进程 + 存储守护 | 数 GB 起步(多组件) | 极低(按需退出) |
关键差异与如何选:「只要定时+脚本」用 Cron 原生零成本但无任何可视化与重试;「要 UI 和多机分发、接受 Node 生态」选 Cronicle;「数据团队重 DAG、有 DBA 和 K8s、要生态广度」选 Airflow;「只是在项目里定义任务命令给开发者跑」选 Taskfile;「单机轻量 + 依赖编排 + 重试告警 + Web UI 一步到位、不想引入数据库」是 Dagu 的甜点区。
7.2 与 Cron 原生的关系
Dagu 不是替代 cron 二进制本身,而是替代「散落的 crontab 条目」这种运维形态:cron 只解决「到点执行」,失败无感知、无日志聚合、无依赖、无 UI。Dagu 用一个二进制把这几层补齐,同时保留 cron 同款 5 段表达式(schedule: "0 2 * * *"),迁移心智成本几乎为零。
7.3 与 Cronicle 对照
Cronicle(5859★)同样主打「Web UI 定时任务」,优势在多机调度与实时终端日志;代价是 Node.js 运行时 + 存储插件的两件套结构,且版本仍处 0.9.x。Dagu 以 Go 单二进制 + 文件状态胜在部署简单、资源占用低,并具备真正的 DAG 依赖编排(Cronicle 的链式能力较弱),两者在 S5 批次内为直接对照组件(见《Cronicle 0.9.137 介绍与选型指南》)。
7.4 与 Apache Airflow 对照
Apache Airflow(47214★,Apache-2.0)是数据编排领域的事实标准:Python 代码定义 DAG、算子生态庞大、调度/回填/传感器能力完备;其官方文档明确自身定位为「以编程方式创作、调度和监控工作流」的平台,需要 PostgreSQL/MySQL 元数据库与常驻的 scheduler/webserver/worker 多组件,属重量级平台。Dagu 的官方自述也直接对标:「Alternative to Airflow / Cron / Job Scheduler」。选型判断:团队已有数据平台诉求(复杂回填、传感器、丰富集成)且愿意运维其组件栈时选 Airflow;若只是「把 cron + 脚本管起来」,引入 Airflow 的运维成本远超收益,Dagu 这类轻量引擎更合适(重量级定位转述自 Airflow 官方文档与仓库 README,2026-10-19 查询)。
7.5 与 Taskfile 对照
go-task/task(16262★,MIT)是「开发者的 Make 替代品」:Taskfile.yml 定义带依赖的任务命令,跑完即退,无调度器、无 Web UI、无告警。两者常被误放同一赛道,实际互补:Taskfile 管「一次性任务执行」,Dagu 管「长期挂着的调度与编排」。一个常见组合是 DAG 步骤内调用 task <target> 复用项目内任务定义。
八、参考链接
- Dagu 官网首页:https://dagu.sh/
- 官方文档站(安装/工作流编写/运维):https://docs.dagu.sh/
- GitHub 仓库(Releases / 源码 / Issues):https://github.com/dagucloud/dagu
- v2.21.0 Release Notes:https://github.com/dagucloud/dagu/releases/tag/v2.21.0
- Linux 安装文档:https://docs.dagu.sh/getting-started/installation/linux
- 调度与执行控制文档:https://docs.dagu.sh/writing-workflows/scheduling
- 本站安装实测篇:《Ubuntu 22.04 安装 Dagu 2.21.0 指南》(发布后链接以平台 slug 为准)