<!-- review: finished -->

<a id="runtime"></a>

# Управление во время выполнения

Чтобы запустить Angie, используйте **systemd** и следующую команду:

```console
$ sudo service angie start
```

Рекомендуется предварительно проверить синтаксис конфигурации. Вот как это
сделать:

```console
$ sudo angie -t && sudo service angie start
```

Чтобы перезагрузить конфигурацию:

```console
$ sudo angie -t && sudo service angie reload
```

Чтобы остановить Angie:

```console
$ sudo service angie stop
```

После установки выполните следующую команду, чтобы убедиться, что Angie
работает:

```console
$ curl localhost:80
```

#### NOTE
Методы запуска открытой версии Angie могут различаться в зависимости от
метода установки.

Angie имеет один главный процесс и несколько рабочих процессов. Главный
процесс отвечает за чтение и оценку конфигурации и управление рабочими
процессами. Рабочие процессы обрабатывают фактические запросы. Angie
использует модель на основе событий и механизмы, зависящие от ОС, для
эффективного распределения запросов между рабочими процессами. Количество
рабочих процессов определяется в конфигурационном файле и может быть
фиксированным для данной конфигурации или автоматически регулироваться в
зависимости от числа доступных ядер CPU (см. [worker_processes](https://angie.software//angie/docs/configuration/modules/core.md#worker-processes)).

При соответствующей настройке
Angie также будет сбрасывать отдельные зоны разделяемой памяти
(в настоящее время — `keys_zone` в [proxy_cache_path](https://angie.software//angie/docs/configuration/modules/http/http_proxy.md#proxy-cache-path))
на диск перед завершением работы,
чтобы новый главный процесс мог восстановить их
и тем самым улучшить производительность.
Если восстановление не удастся выполнить из-за изменения размера зоны,
несовместимости версий бинарных файлов или по другим причинам,
Angie запишет в журнал предупреждение (`failed to restore zone at address`)
и не будет использовать механизм восстановления зон.

<a id="control-signals"></a>

## Использование сигналов

Angie также можно управлять с помощью сигналов. По умолчанию идентификатор
процесса главного процесса записывается в файл `/run/angie.pid`. Это
имя файла можно изменить во время конфигурации или в файле `angie.conf`
с помощью директивы [pid](https://angie.software//angie/docs/configuration/modules/core.md#pid). Главный процесс поддерживает следующие сигналы:

| `TERM`, `INT`   | Быстрое завершение работы                                                                                                                                                                                                                                                                              |
|-----------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `QUIT`          | [Постепенное завершение](https://angie.software//angie/docs/configuration/modules/core.md#worker-shutdown-timeout) работы                                                                                                                                                                              |
| `HUP`           | Перезагрузка конфигурации, обновление часового пояса (только для FreeBSD<br/>и Linux), запуск новых рабочих процессов с обновленной конфигурацией,<br/>[постепенное завершение](https://angie.software//angie/docs/configuration/modules/core.md#worker-shutdown-timeout) старых рабочих<br/>процессов |
| `USR1`          | Перезапуск файлов журналов                                                                                                                                                                                                                                                                             |
| `USR2`          | Обновление исполняемого файла                                                                                                                                                                                                                                                                          |
| `WINCH`         | [Постепенное завершение](https://angie.software//angie/docs/configuration/modules/core.md#worker-shutdown-timeout) рабочих процессов                                                                                                                                                                   |

Отправлять сигналы можно с помощью **kill**:

```console
$ sudo kill -QUIT $(cat /run/angie.pid)
```

Отдельные рабочие процессы также можно контролировать с помощью сигналов,
хотя это не обязательно. Поддерживаются следующие сигналы:

| `TERM`, `INT`   | Быстрое завершение работы                                                                                                                                        |
|-----------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `QUIT`          | [Постепенное завершение](https://angie.software//angie/docs/configuration/modules/core.md#worker-shutdown-timeout) работы                                        |
| `USR1`          | Перезапуск файлов журналов                                                                                                                                       |
| `WINCH`         | Аномальное завершение работы для отладки (требуется включение<br/>[debug_points](https://angie.software//angie/docs/configuration/modules/core.md#debug-points)) |

<a id="control-config-change"></a>

## Изменение конфигурации

Чтобы Angie перечитал конфигурационный файл, необходимо отправить сигнал
`HUP` главному процессу. Сначала главный процесс проверяет корректность
синтаксиса, а затем пытается применить новую конфигурацию, что включает в себя
открытие новых файлов журналов и сокетов для прослушивания. Если применение
новой конфигурации не удалось, главный процесс откатывает изменения и продолжает
работу со старой конфигурацией. Если применение прошло успешно, главный процесс
запускает новые рабочие процессы и отправляет сообщения старым рабочим процессам
с просьбой завершиться [постепенно](https://angie.software//angie/docs/configuration/modules/core.md#worker-shutdown-timeout). Старые
рабочие процессы закрывают свои сокеты для прослушивания и продолжают
обслуживать существующих клиентов. После того как все клиенты будут обслужены,
старые рабочие процессы завершатся.

Angie отслеживает изменения конфигурации для каждого процесса. Номера
поколений начинаются с 1, когда сервер запускается впервые. Эти номера
увеличиваются с каждым перезагрузкой конфигурации и видны в заголовках
процессов:

```console
$ sudo angie
$ ps aux | grep angie

    angie: master process v|version| #1 [angie]
    angie: worker process #1
```

После успешной перезагрузки конфигурации (независимо от того, были ли
фактические изменения), Angie увеличивает номер поколения для процессов,
которые получили новую конфигурацию:

```console
$ sudo kill -HUP $(cat /run/angie.pid)
$ ps aux | grep angie

    angie: master process v|version| #2 [angie]
    angie: worker process #2
```

Если какие-либо рабочие процессы из предыдущих поколений продолжают работать,
они сразу же станут заметны:

```console
$ ps aux | grep angie

    angie: worker process #1
    angie: worker process #2
```

#### NOTE
Не путайте номер поколения конфигурации с неким 'номером процесса'; Angie
не использует непрерывную нумерацию процессов для практических целей.

<a id="log-rotation"></a>

## Ротация лог-файлов

Для ротации лог-файлов сначала переименуйте файлы. Затем отправьте сигнал
`USR1` главному процессу. Главный процесс снова откроет все открытые
лог-файлы и назначит их непривилегированному пользователю, под которым работают
рабочие процессы. После успешного открытия файлов главный процесс закроет все
открытые файлы и уведомит рабочие процессы о необходимости открыть свои
лог-файлы. Рабочие процессы также немедленно откроют новые файлы и закроют
старые. В результате старые файлы становятся доступными для последующей
обработки, такой как сжатие, почти сразу.

<a id="service-upgrade"></a>

## Обновление исполняемого файла на лету

Чтобы обновить исполняемый файл сервера, сначала замените старый исполняемый
файл на новый. Затем отправьте сигнал `USR2` главному процессу. Главный
процесс переименует свой текущий файл с идентификатором процесса в новый файл с
суффиксом `.oldbin`, например,
`/usr/local/angie/logs/angie.pid.oldbin`, и затем запустит новый
исполняемый файл, который, в свою очередь, запустит новые рабочие процессы.

Обратите внимание, что старый главный процесс не закрывает свои сокеты для
прослушивания и может быть управляем для перезапуска своих рабочих процессов в
случае необходимости. Если новый исполняемый файл работает не так, как
ожидалось, вы можете предпринять следующие действия:

* Отправьте сигнал `HUP` старому главному процессу. Это запустит новые
  рабочие процессы без повторного чтения конфигурации. После этого вы можете
  завершить все новые процессы [постепенно](https://angie.software//angie/docs/configuration/modules/core.md#worker-shutdown-timeout),
  отправив сигнал `QUIT` новому главному процессу.
* Отправьте сигнал `TERM` новому главному процессу. Он отправит сообщение
  своим рабочим процессам с просьбой немедленно выйти. Если какие-либо процессы
  не выходят, отправьте сигнал `KILL`, чтобы заставить их выйти. Когда
  новый главный процесс завершится, старый главный процесс автоматически
  запустит новые рабочие процессы.

Если новый главный процесс завершится, старый главный процесс удалит суффикс
`.oldbin` из имени файла с идентификатором процесса.

Если обновление прошло успешно, отправьте сигнал `QUIT` старому главному
процессу, и останутся только новые процессы.

При соответствующей настройке
Angie также будет сбрасывать отдельные зоны разделяемой памяти
(в настоящее время — `keys_zone` в [proxy_cache_path](https://angie.software//angie/docs/configuration/modules/http/http_proxy.md#proxy-cache-path))
на диск перед обновлением,
чтобы новый главный процесс мог восстановить их
и тем самым улучшить производительность.
Если восстановление не удастся выполнить из-за изменения размера зоны,
несовместимости версий бинарных файлов или по другим причинам,
Angie запишет в журнал предупреждение (`failed to restore zone at address`)
и не будет использовать механизм восстановления зон.

<a id="runtime-cli-options"></a>

## Параметры командной строки

| `-?`, `-h`     | Вывод справки по параметрам командной строки,<br/>затем выход.                                                                                                                                                               |
|----------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `--build-env`  | Вывод вспомогательной информации об окружении сборки,<br/>затем выход.                                                                                                                                                       |
| `-c` файл      | Запуск с альтернативным файлом конфигурации<br/>вместо [файла по умолчанию](https://angie.software//angie/docs/configuration/configfile.md#configfile).                                                                      |
| `-e` файл      | Запуск с альтернативным лог-файлом ошибок<br/>вместо [файла по умолчанию](https://angie.software//angie/docs/configuration/processing.md#logging).<br/>Специальное значение `stderr` задает стандартный файл ошибок.         |
| `-g` директивы | Запуск с установкой<br/>[глобальных директив конфигурации](https://angie.software//angie/docs/configuration/modules/core.md#core), например:<br/>`angie -g "pid /var/run/angie.pid; worker_processes `sysctl -n hw.ncpu`;"`. |
| `-m`, `-M`     | Вывод списка встроенных (`-m`)<br/>или встроенных и загруженных (`-M`) модулей,<br/>затем выход.                                                                                                                             |
| `-p` префикс   | Запуск с заданным префиксом пути `angie`<br/>(каталога, в котором будут находиться файлы сервера;<br/>по умолчанию — `/usr/local/angie/`).                                                                                   |
| `-q`           | Вывод только сообщений об ошибках, если заданы `-t` или `-T`;<br/>иначе эффекта нет.                                                                                                                                         |
| `-s` сигнал    | Отправка [сигнала](#control-signals) главному процессу:<br/>`stop`, `quit`, `reopen`, `reload` и так далее.                                                                                                                  |
| `-t`           | Тестирование файла конфигурации,<br/>затем выход.<br/>Angie проверяет синтаксис конфигурации,<br/>рекурсивно включая файлы, упомянутые в ней.                                                                                |
| `-T`           | То же, что `-t`,<br/>но с выводом сводной конфигурации в стандартный поток вывода<br/>после рекурсивного включения всех упомянутых в ней файлов.                                                                             |
| `-v`           | Вывод версии Angie,<br/>затем выход.                                                                                                                                                                                         |
| `-V`           | Вывод версии Angie, версии компилятора,<br/>времени сборки и использованных [параметров сборки](https://angie.software//angie/docs/installation/sourcebuild.md#configure),<br/>затем выход.                                  |
