Фонові задачі на Bull (Redis). Усі крон-воркери — класи на спільній основі (src/prime/workers/bull/CronWorker.ts), стартують одним реєстром (src/prime/workers/CronWorkersModule.ts) тільки на production/computer. Розклад і параметри кожного воркера живуть у stack-commons (StackMonitoring.WORKERS) — це єдине джерело правди, в коді воркера розкладу нема.
Спільна інфраструктура
Черга в Redis — ім’я <NODE_ENV>:prime:<workerType>, тому prod/dev-черги в одному Redis не перетинаються. Реєстрація розкладу ідемпотентна: зміна cron/tz прибирає застарілий repeat-запис, активні/відкладені джоби не чіпає (ретраї переживають деплой). Завислий джоб визнається stalled і піднімається повторно (до 2 разів), потім FAILED. Сам Bull-engine — платформенний, спільний для беків (stack-commons).
VPS-гейт — логіка виконується лише на головному VPS; на інших тік скіпається, крон при цьому не зупиняється.
Два режими:
durable — рідкісні/важливі задачі: черга не чиститься при рестарті, ретраї (3 спроби з паузою 30 хв) і відновлення завислих джобів переживають рестарт, таймаут-запобіжник 1 год.
ephemeral — часті задачі: черга чиститься на старті (без catch-up прострочених тіків), без ретраю — наступний тік і так скоро.
ТГ-моніторинг (де ввімкнений): COMPLETED на успіху; після першої невдалої спроби — ранній сигнал «не відробив вчасно»; FAILED рівно один раз — коли ретраї вичерпано або джоб остаточно завис.