> For the complete documentation index, see [llms.txt](https://potykion.gitbook.io/pypc-tlbx/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://potykion.gitbook.io/pypc-tlbx/devops/supervisor.md).

# Supervisor

[Supervisor](http://supervisord.org/) - программулина для управления процессами.

### Установка

Устанавливаем как питон-пакет:

```
pip install supervisor
```

Создаем конфиг, в котором, помимо настроек Supervisor, будут описываться управляемые процессы:

```
echo_supervisord_conf >  /etc/supervisord.conf
```

### Создание процесса

Чтобы добавить процесс, необходимо определить секцию program в `supervisord.conf`:

```
[program:{program_name}]
process_name = {program_name}
command={command}
directory={directory}

redirect_stderr=true
user=root
autorestart=true
```

* program\_name - название процесса
* command - выполняемая команда
* directory - рабочая директория

Больше опций [здесь](http://supervisord.org/configuration.html).

Часто веб-фреймворки сами предоставляют инструкции для запуска. Помимо запуска с помощью Supervisor, описывается также nginx-проксирование, например [aiohttp](https://aiohttp.readthedocs.io/en/stable/deployment.html), [gunicorn](http://docs.gunicorn.org/en/latest/deploy.html).

#### Выполняемая команда

Питон программы принято запускать из виртуальной среды. Чтобы не прописывать путь к виртуальной среде, можно воспользоваться [pipenv](https://docs.pipenv.org/):

```
pipenv run python scrip.py
```

Полный путь к запускаемому скрипту писать не нужно, так как рабочая директория определена в `supervisord.conf`.

### Запуск и мониторинг процессов

После добавления или изменения процессов, необходимо считать изменения конфига и перезапустить процессы:

```
sudo supervisorctl reread
sudo supervisorctl update
```

Для просмотра активных процессов:

```
sudo supervisorctl status
```

Для перезапуска конкретного процесса:

```
sudo supervisorctl restart {process_name}
```

Если запущено несколько процессов (опция numprocs), то необходимо перезапустить группу процессов:

```
sudo supervisorctl restart {process_name}:*
```

#### Логи

Логи supervisor находятся по такому пути: `/var/log/supervisor` - там же можно посмотреть почему процесс имеет статус FATAL

### Если все плохо

Если возникают ошибки, типа:

```
unix:///var/run/supervisor.sock no such file
```

Или что-нибудь такое:

```
error: <class 'socket.error'>, [Errno 2] No such file or directory: file: /usr/lib/python2.7/socket.py line: 224
```

То, проще всего, перезапустить supervisor:

```
sudo supervisord
```


---

# 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:

```
GET https://potykion.gitbook.io/pypc-tlbx/devops/supervisor.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
