Перейти к основному содержимому

Jobs, очереди и cron

Очереди

По умолчанию queue driver — database.

Важные таблицы:

  • jobs;
  • failed_jobs;
  • job_batches.

В dev-скрипте composer dev запускается:

php artisan queue:listen --tries=1

В production нужен отдельный queue worker/supervisor. Без него page-cache jobs не будут выполняться.

Page cache jobs

TriggerWpPageCache

Получает:

  • path;
  • url.

Что делает:

  1. Логирует старт.
  2. Делает HTTP GET к WP URL с timeout 100 секунд.
  3. Если ответ неуспешный, пишет warning и завершает работу.
  4. Нормализует path.
  5. Ищет активные LandingProxyPage.
  6. Если path совпал с proxy pattern, dispatch-ит TriggerLaravelPageCache.

TriggerLaravelPageCache

Получает локальный URL и добавляет к нему WEBSERVER_URL.

Что делает:

  1. Логирует старт.
  2. Делает HTTP GET к Laravel URL.
  3. Добавляет header X-FORCE-UPDATE: true.
  4. Логирует success или warning.

Scheduler

Scheduler объявлен в routes/console.php.

Timezone: Europe/Moscow.

КомандаВремяНазначение
cron:status-movement01:05, 13:05Смена статусов offering
cron:check-and-rebuild-status01:10, 13:10Пересборка format/page status из status
cron:tariff-movement01:15, 13:15Смена тарифов offering

cron:status-movement

Команда вызывает helper handleStatusMovements().

Логика date-based:

  • берутся правила переходов статусов;
  • проверяются условия;
  • у подходящих product_offerings меняется status_id;
  • связанные поля format/page status затем синхронизируются model event или отдельной командой rebuild.

cron:check-and-rebuild-status

Команда проходит по всем product_offerings и напрямую через DB::table обновляет:

  • product_format_id;
  • page_status_id.

Источник — текущий status_id и таблица product_offering_statuses.

Эта команда нужна как страховочная синхронизация.

cron:tariff-movement

Команда вызывает helper handleTariffMovements().

Логика date-based:

  • берутся правила tariff_movements;
  • проверяются условия;
  • у подходящих product_offerings меняется tariff_id.

Что должно быть настроено на сервере

Минимально:

* * * * * cd /path/to/project && php artisan schedule:run >> /dev/null 2>&1

И отдельный queue worker:

php artisan queue:work --tries=3

Конкретный supervisor/systemd config зависит от окружения.

Что мониторить

ЧтоПочему
failed_jobsОшибки прогрева страниц и других jobs
jobsЗастрявшая очередь
Laravel logsОшибки HTTP-запросов WP/Laravel cache jobs
product_offerings.status_idКорректность status movement
product_offerings.tariff_idКорректность tariff movement
landing_page_cache_entriesРост и устаревшие cache records