Запуск и управление#

Angie PRO запускается как системный сервис следующей командой:

$ sudo service angie start

Рекомендуется перед стартом выполнить проверку синтаксиса конфигурационного файла, команда:

$ sudo angie -t && sudo service angie start

Команда для перезагрузки:

$ sudo angie -t && sudo service angie reload

Команда для остановки процесса Angie PRO:

$ sudo service angie stop

После первичной установки можно проверить, что Angie PRO успешно запустился:

$ curl localhost:80

Примечание

Способы запуска открытой версии Angie зависят от способа установки.

У Angie PRO есть один главный и несколько рабочих процессов. Основная задача главного процесса — чтение и проверка конфигурации и управление рабочими процессами. Рабочие процессы выполняют фактическую обработку запросов. Angie PRO использует модель, основанную на событиях, и зависящие от операционной системы механизмы для эффективного распределения запросов между рабочими процессами. Количество рабочих процессов задается в конфигурационном файле и может быть фиксированным для данной конфигурации или автоматически устанавливаться равным числу доступных процессорных ядер (см. worker_processes).

Управлять Angie PRO можно также с помощью сигналов. Номер главного процесса по умолчанию записывается в файл /var/run/angie.pid. Изменить имя этого файла можно при конфигурации сборки или же в angie.conf директивой pid. Главный процесс поддерживает следующие сигналы:

TERM, INT

быстрое завершение

QUIT

плавное завершение

HUP

изменение конфигурации, обновление изменившейся временной зоны (только для FreeBSD и Linux), запуск новых рабочих процессов с новой конфигурацией, плавное завершение старых рабочих процессов

USR1

переоткрытие лог-файлов

USR2

обновление исполняемого файла

WINCH

плавное завершение рабочих процессов

Управлять рабочими процессами по отдельности не нужно. Тем не менее, они тоже поддерживают некоторые сигналы:

TERM, INT

быстрое завершение

QUIT

плавное завершение

USR1

переоткрытие лог-файлов

WINCH

аварийное завершение для отладки (требует включения debug_points)

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

Для того чтобы Angie PRO перечитал файл конфигурации, нужно послать главному процессу сигнал HUP. Главный процесс сначала проверяет синтаксическую правильность конфигурации, а затем пытается применить новую конфигурацию, то есть, открыть лог-файлы и новые слушающие сокеты. Если ему это не удается, то он откатывает изменения и продолжает работать со старой конфигурацией. Если же удается, то он запускает новые рабочие процессы, а старым шлет сообщение о плавном выходе. Старые рабочие процессы закрывают слушающие сокеты и продолжают обслуживать старых клиентов. После обслуживания всех клиентов старые рабочие процессы завершаются.

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

sudo angie
ps aux | grep angie

    angie: master process v1.5.2 #1 [angie]
    angie: worker process #1

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

sudo angie -s reload
ps aux | grep angie

    angie: master process v1.5.2 #2 [angie]
    angie: worker process #2

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

ps aux | grep angie

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

Примечание

Не следует считать номер поколения конфигурации в имени процесса «номером» самого процесса; Angie PRO не использует сквозную нумерацию своих процессов для каких-либо прикладных целей.

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

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

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

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

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

  • Послать старому главному процессу сигнал HUP. Старый главный процесс, не перечитывая конфигурации, запустит новые рабочие процессы. После этого можно плавно завершить все новые процессы, послав новому главному процессу сигнал QUIT.

  • Послать новому главному процессу сигнал TERM. В ответ на это он пошлет сообщение о немедленном выходе своим рабочим процессам, и все они практически сразу же завершатся. (Если новые процессы по каким-то причинам не завершаются, нужно послать им сигнал KILL, который заставит их завершиться.) По завершению нового главного процесса старый главный процесс автоматически запустит новые рабочие процессы.

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

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

Управление из командной строки#

-? | -h

вывод справки по параметрам командной строки

-c файл

использование альтернативного конфигурационного файла файл вместо файла по умолчанию.

-e файл

использование альтернативного лог-файла ошибок файл вместо файла по умолчанию. Специальное значение stderr выбирает стандартный файл ошибок

-g директивы

задание глобальных директив конфигурации, например:
angie -g "pid /var/run/angie.pid; worker_processes `sysctl -n hw.ncpu`;"

-p префикс

задание префикса пути angie, т.е. каталога, в котором будут находиться файлы сервера (по умолчанию — каталог /usr/local/angie)

-q

вывод только сообщений об ошибках при тестировании конфигурации

-s сигнал

отправка сигнала главному процессу: stop, quit, reopen, reload

-t

тестирование конфигурационного файла: Angie PRO проверяет синтаксическую правильность конфигурации, а затем пытается открыть файлы, описанные в конфигурации

-T

то же, что и -t, а также вывод конфигурационных файлов в стандартный поток вывода

-v

вывод версии Angie PRO

-V

вывод версии Angie PRO, версии компилятора и параметров конфигурации сборки