Laravel Horizon
Laravel Horizon — это панель контроля фоновых задач iEXExchanger.
Через Horizon выполняются процессы, которые не должны тормозить сайт, админку или создание заявок: отправка уведомлений, обработка файлов, экспорт заявок, пересчёт данных, аналитика, webhooks, импорт данных плагинов и другие фоновые операции.
Horizon работает поверх очередей Laravel и Redis. Если очередь настроена неправильно или Horizon не запущен, часть фоновых процессов может перестать выполняться или будет выполняться с задержкой.
Где находится Horizon
В панели управления откройте: «Утилиты» — «Horizon и Pulse» — «Laravel Horizon»

Прямой адрес:

Обычным клиентам и менеджерам без технического доступа этот раздел показывать не рекомендуется.
Для чего нужен Horizon
Horizon нужен, чтобы:
видеть, работают ли фоновые очереди;
проверять, выполняются ли задачи;
смотреть ошибки фоновых задач;
понимать, какая очередь перегружена;
контролировать отправку писем и Telegram-уведомлений;
проверять обработку файлов, экспорта, аналитики и webhooks;
перезапускать воркеры после обновлений;
находить причины задержек в фоновых процессах.
Важное отличие: CRON и Horizon
В системе есть два разных механизма:
CRON
Запускает задачи по расписанию
Horizon
Выполняет фоновые задачи из очереди
Пример:
CRON запускает команду по расписанию.
Команда ставит задачу в очередь.
Horizon берёт задачу из очереди.
Worker выполняет задачу.
Система сохраняет результат.
То есть CRON часто выступает как диспетчер, а Horizon — как исполнитель фоновой работы.
Что нужно для работы Horizon
Для production-сервера должны быть настроены:
Redis;
Laravel queue через Redis;
запущенный процесс Horizon;
Supervisor или аналогичный менеджер процессов;
Laravel Scheduler / CRON.
В .env проекта для очередей должен использоваться Redis:
Если указано:
задачи будут выполняться сразу в текущем процессе, а Horizon не будет обрабатывать их как очередь.
Для production это нежелательно.
Как запускается Horizon
Обычно Horizon запускается через Supervisor.
Команда запуска:
После изменения настроек, обновления проекта или изменения .env рекомендуется корректно перезапустить Horizon:
После этой команды Horizon завершит текущие воркеры, а Supervisor запустит их заново.
Почему Horizon нужно перезапускать после изменений
Horizon — это долгоживущий процесс. Он загружает конфигурацию при старте.
Если изменить настройки, которые используются в фоновых задачах, уже запущенные воркеры могут продолжать работать со старой конфигурацией.
Это может касаться:
SMTP;
Redis;
mail-драйвера;
настроек очередей;
ключей интеграций;
runtime-настроек системы;
переменных
.env;настроек уведомлений.
После важных изменений выполните:
Основные очереди проекта
В текущем проекте Horizon обрабатывает очереди:
Очередь analytics вынесена в отдельный supervisor, потому что аналитика может выполняться дольше обычных задач.
Также в проекте есть очередь:
Она используется для AI-ответов в чате заявки.
В текущей конфигурации Horizon очередь ai может не входить в основной список supervisor’а. Если AI-чат должен работать через Horizon, очередь ai нужно добавить в конфигурацию Horizon или запустить отдельный worker для этой очереди.
Supervisor Horizon в проекте
В проекте используется два основных supervisor’а Horizon:
supervisor-1;
supervisor-analytics.
Приоритеты очередей
Очереди разделяют фоновые задачи по важности и типу нагрузки.
mail-high
Срочные email-уведомления
mail-low
Обычные и низкоприоритетные email-уведомления
high
Срочные фоновые задачи без mail-канала
default
Общая очередь по умолчанию
media
Обработка файлов и изображений
low
Низкоприоритетные служебные задачи
order-recount-scan
Поиск заявок для пересчёта
order-recount
Пересчёт конкретных заявок
presence
Фоновая активность и присутствие пользователей
analytics
Тяжёлый пересчёт аналитики
ai
AI-ответы в чате заявки
Какие задачи выполняются через Horizon
Через Horizon выполняются разные фоновые задачи iEXExchanger.
Основные группы:
уведомления;
обработка файлов;
пересчёт заявок;
аналитика;
экспорт заявок;
архивирование заявок;
импорт данных плагинов;
уровни клиентов;
глобальный поиск;
webhooks;
журнал авторизаций;
парсер курсов по формуле;
AI-ответы в чате заявки;
реферальные переходы;
бонусный центр.
Уведомления
Job:
Очереди:
Используется системой SmartNotifier.
Через эту задачу отправляются:
email-уведомления;
Telegram-уведомления;
уведомления по заявкам;
уведомления администраторам;
письма восстановления пароля;
письма подтверждения;
уведомления о верификации;
уведомления по выплатам;
тестовые письма.
Как работает отправка уведомления
В системе происходит событие: заявка создана, заявка оплачена, оператор ответил, вход выполнен.
SmartNotifier проверяет, нужно ли отправлять уведомление.
Система определяет канал: email, Telegram или оба.
Система выбирает очередь по приоритету.
В Horizon появляется задача
SendNotificationJob.Worker отправляет уведомление.
Результат фиксируется в логах доставки уведомлений.
Если письма или Telegram-уведомления не приходят, Horizon — одно из первых мест, где нужно проверить ошибки.
Обработка файлов Media Manager
Job:
Очередь:
Используется при загрузке файлов через Media Manager.
Задача:
обрабатывает загруженный файл;
создаёт служебные данные;
готовит варианты изображений;
может создавать оптимизированные версии;
не заставляет администратора ждать тяжёлую обработку прямо во время загрузки.
Как работает обработка файла
Администратор загружает файл.
Файл сохраняется.
Система ставит задачу
ProcessMediaFileJobв очередьmedia.Horizon берёт задачу.
Файл обрабатывается.
Данные файла обновляются.
Если worker был выключен, в системе могут быть страховочные команды, которые повторно отправляют необработанные файлы в очередь.
Пересчёт заявок
Jobs:
Очереди:
Используется системой пересчёта заявок.
Задачи:
ищут заявки, которые нужно пересчитать;
группируют заявки в пачки;
пересчитывают конкретные заявки;
учитывают настройки пересчёта по статусам и CRON;
не выполняют тяжёлый пересчёт прямо в момент действия оператора.
Как работает пересчёт
CRON запускает команду пересчёта.
Команда ставит задачу сканирования в очередь
order-recount-scan.ScanCronCandidatesJobищет подходящие заявки.Найденные заявки разбиваются на пачки.
RecountTasksBatchJobотправляет конкретные пересчёты.RecountTaskJobпересчитывает отдельную заявку.Результат сохраняется в системе.
Аналитика
Job:
Очередь:
Используется для фонового пересчёта аналитики.
Задача:
пересчитывает аналитические данные;
обновляет аналитические витрины;
обрабатывает последние периоды;
выполняет ночной полный пересчёт расширенного окна.
Расписание аналитики
В проекте может быть настроено:
каждый час — пересчёт последних
3дней;ежедневно в
00:20— полный пересчёт последних30дней;каждый час — проверка здоровья аналитики.
Почему аналитика вынесена отдельно
Аналитика может быть тяжёлой: много заявок, большие периоды, агрегаты, прибыль, статусы, операторы.
Поэтому она вынесена в отдельную очередь analytics, чтобы не мешать отправке писем, обработке заявок и другим быстрым процессам.
Экспорт заявок
Job:
Очередь:
Используется при экспорте заявок.
Задача:
создаёт файл экспорта;
применяет выбранные фильтры;
формирует файл в нужном формате;
сохраняет результат;
обновляет статус экспорта.
Как работает экспорт
Менеджер запускает экспорт или срабатывает расписание экспорта.
Система создаёт запись экспорта.
В очередь ставится
OrdersExportJob.Horizon формирует файл.
В экспорте появляется готовый файл для скачивания.
Если произошла ошибка, она фиксируется в статусе экспорта.
Архивация заявок
Job:
Очередь:
Используется системой архивирования заявок.
Задача:
берёт запуск архивации;
проверяет правила архивации;
переносит подходящие заявки в архив;
пишет историю запуска;
защищается от параллельного запуска.
Как работает архивация
CRON или менеджер запускает архивацию.
Система создаёт запись запуска архивации.
Если это не тестовый запуск, задача отправляется в очередь
low.Horizon выполняет
ArchiveOrdersJob.Заявки переносятся в архив.
В истории архивации появляется результат.
Импорт данных плагинов
Job:
Очередь:
Используется в системе установки и импорта плагинов.
Задача:
импортирует большие наборы данных плагина;
обрабатывает пары курсов частями;
обновляет прогресс импорта;
защищает импорт от параллельного запуска;
фиксирует ошибку, если импорт не завершился.
Как работает импорт
Администратор устанавливает или активирует плагин.
Если у плагина есть большой список пар, система создаёт импорт.
RunPluginImportJobставится в очередь.Horizon обрабатывает данные порциями.
После завершения импорт получает статус выполненного.
Если произошла ошибка, импорт получает статус ошибки.
Уровни клиентов
Jobs:
Очередь:
Используется системой уровней клиентов.
Задачи:
пересчитывают уровень одного клиента;
запускают массовый пересчёт всех клиентов;
пишут историю изменения уровня;
не тормозят завершение заявки.
Когда запускается пересчёт
после успешной заявки;
по расписанию;
вручную из админки при массовом пересчёте;
после изменения правил уровней.
Глобальный поиск по админке
Job:
Очередь:
Используется для обновления индекса поиска по админке.
Когда изменяется важная сущность, система может поставить задачу переиндексации, чтобы поиск по админке находил актуальные данные.
Это фоновая задача, поэтому она не мешает сохранению формы.
Webhooks API
Job:
Очередь:
Используется системой API/webhooks.
Задача:
отправляет webhook на внешний URL;
подписывает запрос;
сохраняет HTTP-статус ответа;
фиксирует успешную доставку;
планирует повторную попытку при ошибке.
Как работает доставка webhook
В системе происходит событие.
Создаётся webhook event.
Для endpoint создаётся delivery.
SendWebhookDeliveryJobотправляется в очередь.Horizon выполняет HTTP-запрос.
Если внешний сервис ответил успешно, доставка отмечается как успешная.
Если произошла ошибка, система фиксирует её и может поставить повторную попытку.
Журнал авторизаций
Job:
Очередь:
Используется для обогащения событий авторизации.
Задача:
берёт событие входа;
проверяет IP;
добавляет GeoIP-информацию;
сохраняет страну, город и дополнительные данные.
Эта задача не должна мешать входу пользователя, поэтому выполняется в фоне.
Парсер курсов по формуле
Job:
Очередь:
Используется при обновлении курсов по формуле.
Если администратор запускает обновление, система может поставить задачу в очередь и показать сообщение, что обновление поставлено в очередь.
AI-ответы в чате заявки
Job:
Очередь:
Используется для AI-ответов в чате заявки.
Если AI-чат должен работать через Horizon, очередь ai должна быть добавлена в список очередей Horizon или обработана отдельным worker-процессом.
Логирование реферальных переходов
Job:
Очередь:
Используется для записи посещений по реферальным ссылкам.
Бонусный центр
Job:
Очередь:
Используется для синхронизации данных бонусного центра пользователя.
Что видно в Horizon
В Horizon обычно доступны такие разделы:
Dashboard;
Jobs;
Failed Jobs;
Queues;
Metrics.
Что делать при ошибках Failed Jobs
Если в Horizon появились failed jobs:
Откройте задачу.
Посмотрите название job.
Посмотрите очередь.
Прочитайте текст ошибки.
Определите модуль по названию job.
Исправьте причину.
Повторите задачу, если это безопасно.
Примеры:
Ошибка SMTP
Почтовые настройки
Ошибка webhook
Внешний URL и доступность сервиса
Ошибка файла
Права на storage/public
Ошибка аналитики
Базу данных и нагрузку
Ошибка Redis
Redis и Supervisor
Команды для диагностики
Подключение к серверу по SSHПроверить статус Horizon:
Корректно перезапустить Horizon:
Посмотреть неудачные задачи Laravel:
Повторить все failed jobs:
Очистить failed jobs:
Проверить Redis:
Если Redis работает, он должен ответить:
Проверить Supervisor:
Что делать, если Horizon не работает
Проверьте по порядку:
Redis установлен и отвечает
PONG.В
.envуказаноQUEUE_DRIVER=redis.Выполнены миграции таблиц очередей и failed jobs.
Supervisor запущен.
В Supervisor есть процесс Horizon.
Команда
php artisan horizon:statusпоказывает активное состояние.В логах нет ошибок подключения к Redis.
После изменения
.envвыполнен перезапуск Horizon.
Что делать, если задачи стоят в очереди и не выполняются
Возможные причины:
Horizon не запущен;
Supervisor не запустил процесс;
Redis недоступен;
очередь не входит в список Horizon;
задача отправляется в отдельную очередь, например
ai, а worker её не слушает;задача зависла из-за внешнего сервиса;
слишком мало процессов для текущей нагрузки.
Проверьте, в какую очередь попала задача. Если очередь не указана в конфиге Horizon, её нужно добавить в supervisor или запустить отдельный worker.
Что делать, если не приходят письма
Проверьте:
Работает ли Horizon.
Есть ли задачи
SendNotificationJob.Нет ли ошибок в Failed Jobs.
Обрабатываются ли очереди
mail-highиmail-low.Правильно ли настроен SMTP.
Не отключена ли очередь уведомлений.
Не стоит ли
QUEUE_DRIVER=syncвместоredis.
Если задача SendNotificationJob падает, причина обычно не в Horizon, а в SMTP, шаблоне письма, получателе или настройках уведомлений.
Что делать, если не обрабатываются изображения
Проверьте:
очередь
media;задачи
ProcessMediaFileJob;права на папки хранения файлов;
наличие ошибок в Horizon;
включена ли фоновая обработка Media Manager.
Что делать, если не обновляется аналитика
Проверьте:
очередь
analytics;supervisor
supervisor-analytics;задачи
AnalyticsRebuildJob;нет ли failed jobs;
не выполняется ли уже долгий пересчёт;
работает ли scheduler.
Аналитика может выполняться долго. Это нормально для больших проектов.
Что делать после обновления проекта
После обновления проекта рекомендуется выполнить:
Если используется Supervisor, он сам поднимет Horizon снова.
Если менялись зависимости, настройки Redis, очередей или .env, дополнительно проверьте:
Что важно объяснить клиентам
Horizon не создаёт заявки, не принимает оплаты и не выполняет обмен сам по себе.
Он отвечает за фоновые процессы:
отправить уведомление;
обработать файл;
пересчитать данные;
сформировать экспорт;
доставить webhook;
выполнить аналитику;
обработать задачу, которую система поставила в очередь.
Если Horizon остановлен, основной сайт может открываться, но фоновые функции будут работать неправильно или с задержкой.
Рекомендуемая настройка production
Для production рекомендуется:
Также должно быть настроено:
Redis установлен и доступен;
Horizon запущен через Supervisor;
Scheduler работает через CRON;
Horizon перезапускается после обновлений и важных изменений настроек.
Короткая схема работы
Частые вопросы
Horizon нужен для работы сайта?
Для открытия сайта — не всегда.
Но для фоновых процессов Horizon критически важен. Без него могут не отправляться уведомления, не выполняться экспорты, не обрабатываться файлы, не пересчитываться аналитика и не запускаться другие фоновые задачи.
Почему сайт работает, но письма не приходят?
Сайт может открываться без Horizon, но письма отправляются через очередь.
Проверьте Horizon, очереди mail-high и mail-low, а также failed jobs.
Почему после обновления появились странные ошибки в очередях?
Horizon мог продолжать работать со старой конфигурацией.
Выполните:
Можно ли использовать QUEUE_DRIVER=sync?
Для production не рекомендуется.
При sync задачи выполняются сразу в текущем процессе и могут тормозить сайт или админку. Horizon в таком режиме не будет полноценно контролировать очередь.
Что делать, если очередь ai не выполняется?
Проверьте, добавлена ли очередь ai в конфигурацию Horizon.
Если нет, добавьте её в supervisor Horizon или запустите отдельный worker для этой очереди.
Коротко
Laravel Horizon — это технический центр контроля фоновых задач iEXExchanger.
Через него удобно понимать:
работают ли очереди;
почему задерживаются письма;
где упала обработка файла;
почему не сформировался экспорт;
почему аналитика не обновилась;
какие задачи перегружают систему.
Для стабильной production-работы важно держать включёнными Redis, Supervisor, Scheduler и сам Horizon.
Horizon находится здесь: «Утилиты» — «Horizon и Pulse» — «Laravel Horizon»
Последнее обновление
Это было полезно?