Альтернатива планировщику заданий
Планировщик заданий выполняет команды. Расписания, которым можно управлять, он не даёт.
Dagu устанавливается как служба Windows и добавляет то, чего у планировщика заданий никогда не было: зависимости между заданиями, повторы, логи по шагам, историю запусков и одну консоль в браузере для всех серверов вместо RDP-сессии на каждый.
# 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
Одна веб-консоль для всех серверов
At a glance
Планировщик заданий и Dagu на Windows Server
Объявляются через depends; сбой останавливает последующие шаги.
Отсутствуют. Порядок приближают временем запуска.
Повторы, обработчики восстановления и уведомление по почте.
Код последнего результата, который смотрит человек.
YAML с ревью в Git, разворачивается на любой хост.
Настройка в GUI на каждой машине, экспортируется в XML.
Консоль в браузере с историей запусков и логами по шагам.
Локальная оснастка MMC и журнал событий, на каждом сервере.
In depth
Where each tool fits
Порядок, заданный временем, — это не зависимость
Планировщик запускает задачу в указанное время. Понятия ожидания одной задачи другой у него нет, поэтому порядок выражают, оценивая длительность и разнося время старта.
- Задача на 02:30 запустится независимо от того, успешна ли была задача на 02:00, и обычно обработает то, что та оставила
- depends задаёт порядок напрямую: сбой предыдущего шага останавливает последующую работу, а не портит её
- Действительно независимые задания идут параллельно, а не разносятся по времени из осторожности
Сбои, которые сообщают о себе сами
Упавшая задача выставляет код последнего результата и ждёт, пока кто-нибудь посмотрит. Большинство команд узнаёт об этом на следующее утро от того, кто стоит ниже по потоку данных.
- retry_policy повторяет то, что носит временный характер, прежде чем кого-то будить
- handler_on.failure запускает восстановительное задание, а mail_on отправляет уведомление
- Каждый запуск сохраняет stdout и stderr по каждому шагу, а не только код возврата и то, что попало в журнал событий
Определения, которые можно ревьюить, и консоль, до которой можно дотянуться
Определения планировщика живут в интерфейсе одной машины. Экспорт даёт XML, который никто не читает, а проверить десять серверов — это десять удалённых сессий.
- Рабочие процессы — это YAML в Git: изменение расписания становится pull request, а тест и продакшн держат одно и то же определение
- Веб-интерфейс показывает текущие и прошлые запуски из любого браузера, без RDP на каждый сервер
- Доступны PowerShell, pwsh и cmd.exe, поэтому существующие скрипты переносятся без изменений
FAQ
Practical questions before adopting Dagu
Работает ли Dagu как служба Windows?
Да. Установщик на PowerShell может зарегистрировать его как службу Windows через обёртку WinSW с зафиксированной версией: он стартует вместе с машиной и виден в Get-Service как любая другая служба. Сборки для Windows публикуются для amd64, 386 и arm64.
Продолжат ли работать существующие скрипты PowerShell и batch?
Да. Шаг выполняет команду через PowerShell, pwsh или cmd.exe, выбор задаётся для рабочего процесса или отдельного шага. Если оболочка не задана, Dagu предпочитает PowerShell, затем pwsh, затем cmd.exe. Скрипты вызываются так же, как их вызывал планировщик заданий.
Может ли один Dagu управлять заданиями на нескольких серверах Windows?
Да, двумя способами. Воркеры могут работать на других машинах и получать задания от координатора, а удалённые узлы позволяют одному веб-интерфейсу переключаться между отдельными установками 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.