> For the complete documentation index, see [llms.txt](https://docs.iexexchanger.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.iexexchanger.com/knowledge-base/servery-domeny-i-infrastruktura/overview/process-map/horizon.md).

# Laravel Horizon

Laravel Horizon запускает обработчики Redis-очередей и показывает ожидание, пропускную способность, время выполнения и ошибки заданий. Пакет уже входит в серверную часть iEXExchanger; повторно устанавливать его на рабочем сервере не нужно.

## Где открыть и какое право нужно

* Путь: **«Утилиты» — «Horizon и Pulse» — «Laravel Horizon»**.
* Право: «Разрешить доступ к мониторингу данных».
* Где выдать: **«Пользователи» — «Список групп пользователей» — открыть группу — найти право по названию**.

Экран содержит технические имена заданий и ошибки, поэтому право предназначено для технического администратора, а не для обычного менеджера заявок.

## Что обслуживает Horizon

Текущая конфигурация iEXExchanger содержит supervisor-группы для обычных и приоритетных очередей, медиа, аналитики, уведомлений, чата, AI, административного поиска и диагностики. Точный состав определяется серверным файлом `config/horizon.php` текущей поставки.

Одна команда запускает все настроенные группы:

```bash
cd <ПУТЬ_BACKEND>
/opt/php84/bin/php artisan horizon
```

{% hint style="danger" %}
Не добавляйте рядом постоянный `queue:work --queue=high,low` или worker другой очереди, пока не доказано, что она отсутствует в `config/horizon.php`. Каждая очередь должна иметь одного владельца.
{% endhint %}

## Постоянный запуск через Supervisor

```ini
[program:iex-horizon]
command=/opt/php84/bin/php artisan horizon
directory=<ПУТЬ_BACKEND>
user=<BACKEND_USER>
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
redirect_stderr=true
stdout_logfile=<ПУТЬ_ЖУРНАЛА>/horizon.log
stopwaitsecs=<БОЛЬШЕ_МАКСИМАЛЬНОГО_ВРЕМЕНИ_ЗАДАНИЯ>
```

`<BACKEND_USER>` — владелец серверного сайта, не `root`. Каталог журнала должен существовать и быть доступен этому пользователю.

После применения:

```bash
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl status iex-horizon
cd <ПУТЬ_BACKEND>
/opt/php84/bin/php artisan horizon:status
```

Состояние RUNNING подтверждает наличие процесса, а `horizon:status` — состояние приложения. Дополнительно выполните безопасную задачу и проверьте её конечный результат.

## Тайм-ауты и повторы

Тайм-аут Horizon должен быть больше тайм-аута конкретного задания и меньше `retry_after` соединения очереди. Иначе одна зависшая задача может обрабатываться повторно параллельно.

Перед повтором failed job:

1. зафиксируйте очередь, время, число попыток и первую ошибку;
2. проверьте внешний сервис — действие могло завершиться до ошибки ответа;
3. устраните причину;
4. повторите одну безопасную задачу;
5. проверьте отсутствие дубля и пользовательский результат.

Платёж, callback, выплата и начисление требуют внешней сверки. Удаление записи об ошибке не отменяет уже выполненную финансовую операцию.

## Метрики и Scheduler

iEXExchanger формирует снимки Horizon каждые пять минут через Laravel Scheduler. Если рабочие задания выполняются, но график перестал обновляться, проверьте cron и `schedule:list`, а не перезапускайте Horizon вслепую.

## Обновление кода

После переключения серверного release выполните от владельца сайта:

```bash
cd <ПУТЬ_BACKEND>
/opt/php84/bin/php artisan horizon:terminate
```

Horizon корректно завершит worker, а Supervisor поднимет их на новом коде. Затем проверьте `horizon:status`, список очередей, отставание и одну безопасную задачу.

Полная команда, настройка баланса, метрик и развёртывания описаны в [официальной документации Laravel Horizon](https://laravel.com/docs/horizon). Место процесса в iEXExchanger зафиксировано в [карте процессов](/knowledge-base/servery-domeny-i-infrastruktura/overview/process-map.md).

## Если очередь не обрабатывается

Проверьте по порядку:

1. `supervisorctl status iex-horizon`;
2. `artisan horizon:status`;
3. доступность Redis и правильное соединение очереди;
4. наличие имени очереди в текущей конфигурации Horizon;
5. отставание, failed jobs и первый текст ошибки;
6. Scheduler, если задание должно было создаваться по расписанию.

Не очищайте Redis и не повторяйте все задания как первый способ диагностики.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.iexexchanger.com/knowledge-base/servery-domeny-i-infrastruktura/overview/process-map/horizon.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
