> 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/learn/server-domeny-i-infrastruktura/overview/process-map/supervisor-and-pm2.md).

# Supervisor и PM2

Supervisor управляет долгоживущими процессами серверной части, а PM2 — SSR-процессом клиентского сайта. Оба менеджера должны восстанавливать процессы после сбоя и перезагрузки сервера.

## Supervisor для Laravel

Каждая программа Supervisor должна содержать точный PHP CLI, каталог приложения и пользователя серверного сайта. Базовая форма:

```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>` — владелец серверного сайта, `<ПУТЬ_ЖУРНАЛА>` — доступный ему непубличный каталог, а `stopwaitsecs` должен быть больше максимального времени корректной задачи. Не копируйте пример без подстановки и проверки владельца.

После создания или изменения конфигурации:

```bash
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl status
```

`reread` обнаруживает изменение, `update` применяет состав групп, а `status` подтверждает фактический процесс. Не используйте бесконечный цикл shell вместо менеджера процессов.

Отдельные программы создаются для Horizon, `pulse:check`, `pulse:work` при Redis ingest и Reverb. Не объединяйте их одной командой: нужна независимая перезагрузка и диагностика.

## PM2 для клиентского SSR

Все команды PM2 выполняйте от владельца клиентского сайта. Сначала проверьте пользователя и текущий список:

```bash
whoami
pm2 list
```

Запускайте SSR через поставляемый проектом ecosystem-файл или подтверждённую команду:

```bash
pm2 start <ECOSYSTEM_FILE> --env production
pm2 save
```

`<ECOSYSTEM_FILE>` — файл текущей поставки, в котором заданы имя, рабочий каталог, entrypoint и окружение. Не создавайте второй процесс с другим именем, пока не проверен существующий список.

Для автозапуска выполните `pm2 startup` от владельца сайта. PM2 выведет одну административную команду; проверьте указанные пользователя и путь, затем выполните её с повышенными правами и снова вызовите `pm2 save`. Официальный порядок описан в [документации PM2 Startup Script](https://pm2.keymetrics.io/docs/usage/startup/).

## Обновление процессов

Laravel-процессы перечитывают новый код только после мягкого завершения или перезапуска. Для Horizon используйте `horizon:terminate`, для Pulse — `pulse:restart`, для Reverb — `reverb:restart`. Supervisor автоматически поднимет новые экземпляры.

Для клиента после успешной сборки используйте reload процесса из ecosystem-файла и затем `pm2 save`. Не удаляйте весь список PM2, если меняется один сайт.

## Проверка после перезагрузки

1. Перезагрузите только тестовый сервер или выполните проверку в согласованное окно.
2. Убедитесь, что Supervisor показывает все программы в состоянии RUNNING.
3. От владельца клиентского сайта проверьте `pm2 list`.
4. Откройте клиентский сайт, панель, Horizon и Pulse.
5. Отправьте тестовое событие чата.
6. Убедитесь, что очередь обработала безопасную задачу.

RUNNING подтверждает наличие процесса, но не его исправность. Всегда проверяйте конечный результат.


---

# 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/learn/server-domeny-i-infrastruktura/overview/process-map/supervisor-and-pm2.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.
