⏰ 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.