任务计划程序替代方案

任务计划程序执行命令,但没给你一份可运维的调度。

Dagu 可以注册为 Windows 服务,补齐任务计划程序从未具备的部分:作业之间的依赖、重试、按步骤的日志、运行历史,以及一个覆盖所有服务器的浏览器控制台,而不是逐台远程桌面。

一个文件里的依赖作业链
# nightly-close.yaml
schedule: "0 2 * * *"
max_active_runs: 1
shell: powershell -NoProfile

steps:
  - id: export
    run: .\scripts\Export-Sales.ps1
    retry_policy:
      limit: 2
      interval_sec: 300

  - id: transform
    run: .\scripts\Transform-Sales.ps1
    depends: export

  - id: load
    run: .\scripts\Import-ToCore.ps1
    depends: transform

handler_on:
  failure:
    run: .\scripts\Notify-Failure.ps1

mail_on:
  failure: true

注册为 Windows 服务

支持 PowerShell、pwsh 与 cmd.exe

作业定义是受版本控制的 YAML

一个 Web 控制台覆盖所有服务器

At a glance

Windows Server 上的任务计划程序与 Dagu

依赖关系
Dagu

用 depends 声明;失败会阻止下游步骤。

Windows 任务计划程序

没有。用启动时间近似表达顺序。

失败处理
Dagu

重试、恢复处理器与邮件通知。

Windows 任务计划程序

一个由人查看的上次运行结果代码。

定义
Dagu

在 Git 中评审的 YAML,可部署到任意主机。

Windows 任务计划程序

逐台机器的图形界面配置,可导出为 XML。

可见性
Dagu

带运行历史与按步骤日志的浏览器控制台。

Windows 任务计划程序

每台服务器本地的 MMC 管理单元与事件日志。

In depth

Where each tool fits

01

用时钟表示的顺序不是依赖

任务计划程序在指定时间触发任务。它没有“一个任务等待另一个任务”的概念,因此团队只能靠估算耗时、拉开启动时间来表达顺序。

  • 无论 02:00 的任务是否成功,02:30 的任务照常运行,并且通常直接使用它留下的东西
  • depends 直接声明顺序,上游失败时下游不会运行,也就不会处理损坏的数据
  • 真正相互独立的作业可以并行,而不必出于谨慎而错开
02

会主动报告的失败

失败的计划任务只会设置一个上次运行结果代码,然后等人来看。多数团队是在第二天早上,从数据下游的同事那里得知的。

  • retry_policy 在惊动任何人之前先重试可恢复的失败
  • handler_on.failure 执行恢复作业,mail_on 负责发送通知
  • 每次运行都按步骤保留 stdout 和 stderr,而不是只有一个返回码和事件日志里的零星记录
03

可以评审的定义,可以随处访问的控制台

任务计划程序的定义存在于某一台机器的图形界面里。导出得到的 XML 没人会去评审,而检查十台服务器意味着十次远程会话。

  • 工作流是 Git 中的 YAML,调度变更成为一次 Pull Request,测试与生产可以持有同一份定义
  • Web UI 从任意浏览器展示当前与历史运行,无需逐台建立 RDP 会话
  • PowerShell、pwsh 和 cmd.exe 都可用,现有脚本无需改动即可迁移

FAQ

Practical questions before adopting Dagu

Dagu 能作为 Windows 服务运行吗?

可以。PowerShell 安装程序可以使用版本固定的 WinSW 包装器将其注册为 Windows 服务,随机器启动,并像其他服务一样可被 Get-Service 看到。Windows 版本提供 amd64、386 和 arm64 构建。

现有的 PowerShell 和批处理脚本还能用吗?

能。步骤通过 PowerShell、pwsh 或 cmd.exe 执行命令,可按工作流或按步骤选择。未配置 shell 时,Dagu 依次优先 PowerShell、pwsh、cmd.exe。调用方式与任务计划程序相同。

一个 Dagu 能管理多台 Windows 服务器上的作业吗?

可以,有两种方式。Worker 可以运行在其他机器上并从 coordinator 接收任务;远程节点则让一个 Web UI 在多个独立的 Dagu 部署之间切换。两种方式的控制台都是浏览器而非远程桌面。

支持哪些 Windows 版本?

Windows Server 2019 及更高版本是稳妥的目标。缺少 AF_UNIX 支持的旧版本仍可执行工作流,但实时状态与停止控制的套接字不可用,Dagu 会记录警告并在没有该功能的情况下继续运行。

Next step

Start with one workflow.

Install Dagu, move one fragile script or agent task into YAML, and decide from a real run history.