Skip to content

⏰ Scheduler (демон)

📌 Описание

Планировщик задач внутри демона: выполнение операций по расписанию (cron-синтаксис) и управление очередью фоновых задач ноды. Используется бекапами, продлением сертификатов, автообновлением и пользовательскими задачами.

🎯 Сценарии использования

  • ⏰ Ежедневный бекап в 03:00 (политика от платформы).
  • 🔁 Ежедневная проверка сроков сертификатов Let's Encrypt.
  • 🔄 Автообновление демона — откладывается, если есть активные задачи; --force для принудительного.
  • 🧩 Пользовательская cron-задача: asc task add "0 5 * * *" -- ./cleanup.sh.

🏗️ Техническое решение

✅ Первый инкремент (реализован): исполнитель расписаний + бекапы

Реализован в src/daemon/scheduler/, запускается из главного цикла демона:

  • Исполнитель: просыпается в начале каждой минуты и запускает подошедшие задачи; проход выполняется в блокирующем пуле, ошибки логируются по каждому приложению отдельно — одно сломанное приложение не останавливает остальные. Повторные запуски в пределах одной минуты (быстрый цикл, скачок часов) дедуплицируются по минуте настенных часов.
  • Синтаксис расписаний (Schedule::parse): daily@HH:MM, просто HH:MM (то же, что daily) или cron-выражение из пяти полей минута час день_месяца месяц день_недели с *, значениями, диапазонами a-b, списками a,b,c и шагами /n; день недели 0–7 (0 и 7 — воскресенье). Когда ограничены оба поля даты, действует правило vixie-cron: срабатывает любое из двух. Время — локальное время ноды.
  • Потребитель — бекапы по расписанию (DMN-009): каждому приложению, в чьей политике бекапов (asc app settings, категория backups) задан schedule, бекапы создаются в хранилища политики с её ротацией keep. Редактор настроек проверяет синтаксис расписания при вводе.

📝 Следующие инкременты (запланированы)

  • Типы задач: Install, Update, Uninstall, Backup, Restore, CertRenew, Custom.
  • Состояния: Pending → Running → Completed | Failed | Cancelled; приоритеты Low/Normal/High/Critical.
  • Очередь: приоритетная, персистентная (SQLite) — переживает рестарт демона; незавершённые задачи корректно возобновляются или помечаются Failed.
  • Расписания: одноразовые отложенные задачи в дополнение к cron.
  • Конкурентность: взаимоисключающие задачи (две операции над одним приложением) сериализуются; автообновление ждёт пустую очередь.
  • CLI: asc task list|add|cancel|info; API — для taskmanager платформы (статусы задач стримятся наверх).

🔗 Связанные задачи

DMN-012, TASK-001, BE-005, BE-006 в ROADMAP.md.

Распространяется по лицензии MIT.