Сначала давайте представим, что такое Nginx. Боюсь, некоторые студенты могут забыть определение Nginx!
Nginx имеет основной процесс и несколько рабочих процессов. Основная функция основного процесса — чтение и оценка файлов конфигурации, а также управление рабочими процессами. Рабочие процессы фактически обрабатывают запросы. Количество рабочих процессов настраивается в файле конфигурации и обычно равно количеству ядер и потоков ЦП.
Nginx можно управлять с помощью сигналов. По умолчанию идентификатор основного процесса записывается в файле /usr/local/nginx/logs/nginx.pid. Сигнал может быть отправлен в nginx через исполняемый файл nginx (сигнал nginx -s), либо он может быть отправлен в nginx через команду unix kill. В этом случае сигнал отправляется непосредственно процессу с указанным идентификатором процесса. например: убить QUIT 1628.
Запустите nginx и запустите исполняемый файл nginx напрямую:
[root@localhost ~]# /usr/local/nginx/sbin/nginx
Быстрое завершение работы: nginx -s stop or kill -TERM номер основного процесса или kill -INT номер основного процесса
[root@localhost sbin]# pwd
/usr/local/nginx/sbin
[root@localhost sbin]# ./nginx -s stop
//Вариант 2
[root@localhost sbin]# ps -ef |grep nginx|grep master
корень 9879 1 0 13:15 ? 00:00:00 nginx: главный процесс ./nginx
[root@localhost sbin]# kill -TERM 9879
//Вариант 3
[root@localhost sbin]# kill -INT 9879
Грациозное завершение работы (не принимать новые запросы на подключение, дождаться обработки старых запросов на подключение перед закрытием): nginx -s quit or kill -QUIT номер основного процесса
[root@songguoliang sbin]# pwd
/usr/local/nginx/sbin
[root@songguoliang sbin]# ./nginx -s quit
Примечание. Пользователь, выполняющий эту команду, должен быть пользователем, запускающим nginx.
[root@localhost sbin]# ps -ef |grep nginx
root 9889 1 0 13:17 ? 00:00:00 nginx: master process ./nginx
nobody 9890 9889 0 13:17 ? 00:00:00 nginx: worker process
root 9893 2008 0 13:18 pts/1 00:00:00 grep nginx
[root@localhost sbin]# kill -QUIT 9889
nginx -s перезагрузить или убить -HUP идентификатор основного процесса
Чтобы основной процесс перечитал файл конфигурации, сигнал HUP должен быть отправлен основному процессу. Как только основной процесс получает сигнал на перезагрузку конфигурации, он проверяет правильность синтаксиса файла конфигурации, а затем пытается. чтобы применить новую конфигурацию, то есть открыть новый файл журнала и новый сокет. При прослушивании в случае сбоя он откатывает изменения конфигурации и продолжает использовать старую конфигурацию. В случае успеха он запускает новый рабочий процесс и отправляет сообщение старому рабочему процессу о корректном завершении работы. Старый рабочий процесс получает сообщение. завершение работы После сигнала новые запросы не будут получены. Если запрос уже обрабатывается, он будет закрыт после обработки текущего запроса. Если запрос не обрабатывается, он будет закрыт напрямую.
[root@localhost sbin]# ./nginx -s reload
Вариант 2:
[root@localhost sbin]# ps -ef|grep nginx
root 9944 1 0 13:22 ? 00:00:00 nginx: master process ./nginx
nobody 9949 9944 0 13:23 ? 00:00:00 nginx: worker process
root 9960 9917 0 13:28 pts/1 00:00:00 grep nginx
[root@songguoliang sbin]# kill -HUP 9944
Проверьте правильность синтаксиса файла конфигурации, а затем попробуйте открыть конфигурацию, содержащуюся в файле: nginx -t
[root@localhost sbin]# ./nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@zhouzhou sbin]# ./nginx -v
nginx version: nginx/1.10.1
[root@songguoliang sbin]# ./nginx -V
nginx version: nginx/1.10.1
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC)
configure arguments: --prefix=/usr/local/nginx
Перезапустите файл журнала, который обычно используется при резервном копировании файла журнала: nginx -s reopen or kill -USR1 номер основного процесса.
[root@localhost sbin]# ./nginx -s reopen
[root@localhost sbin]# kill -USR1 2030
Поскольку nginx указывает на файл журнала через индексный дескриптор, индексный дескриптор не имеет ничего общего с именем файла, поэтому даже если файл журнала будет переименован, nginx все равно запишет файл журнала в исходный файл, только повторно открыв файл журнала с помощью. приведенная выше команда позволяет записать журнал в новый файл журнала.
Если вам нужно обновить, добавить или удалить серверные модули, вы можете использовать плавное обновление nginx, чтобы обновить nginx без остановки службы.
(1) Замените старый исполняемый файл новым исполняемым файлом nginx, то есть загрузите новый nginx и перекомпилируйте его по пути установки старой версии (перед перекомпиляцией вы можете создать резервную копию старого исполняемого файла).
(2) Отправьте сигнал USR2 на идентификатор основного процесса nginx.
[root@localhost sbin]# kill -USR2 9944
Обработка перед выполнением команды:
[root@localhost sbin]# ps -ef |grep nginx
root 9944 1 0 13:22 ? 00:00:00 nginx: master process ./nginx
nobody 9965 9944 0 13:29 ? 00:00:00 nginx: worker process
root 10010 9917 0 13:42 pts/1 00:00:00 grep nginx
Процесс после выполнения команды:
[root@localhost sbin]# ps -ef |grep nginx
root 9944 1 0 13:22 ? 00:00:00 nginx: master process ./nginx
nobody 9965 9944 0 13:29 ? 00:00:00 nginx: worker process
root 10012 9944 0 13:43 ? 00:00:00 nginx: master process ./nginx
nobody 10013 10012 0 13:43 ? 00:00:00 nginx: worker process
root 10015 9917 0 13:43 pts/1 00:00:00 grep nginx
После отправки сигнала USR2 в nginx nginx переименует файл logs/nginx.pid в nginx.pid.oldbin, затем использует новый исполняемый файл для запуска нового основного процесса nginx и соответствующего рабочего процесса и создаст новый nginx. pid сохраняет новый номер основного процесса
[root@songguoliang logs]# pwd
/usr/local/nginx/logs
[root@songguoliang logs]# ll
Общая дозировка 16
-rw-r--r--. 1 nobody root 596 Октябрь 8 13:02 access.log
-rw-r--r--. 1 nobody root 881 Октябрь 8 13:43 error.log
-rw-r--r--. 1 root root 6 Октябрь 8 13:43 nginx.pid
-rw-r--r--. 1 root root 5 Октябрь 8 13:22 nginx.pid.oldbin
[root@songguoliang logs]# cat nginx.pid
10012
[root@songguoliang logs]# cat nginx.pid.oldbin
9944
В это время новый экземпляр и старый экземпляр nginx работают одновременно, совместно обрабатывая соединение запроса. Следующим шагом будет завершение процесса старого экземпляра.
Сначала отправьте сигнал WINCH старому основному процессу, убейте -WINCH старый номер основного процесса.
[root@localhost sbin]# ps -ef |grep nginx
root 9944 1 0 13:22 ? 00:00:00 nginx: master process ./nginx
nobody 9965 9944 0 13:29 ? 00:00:00 nginx: worker process
root 10012 9944 0 13:43 ? 00:00:00 nginx: master process ./nginx
nobody 10013 10012 0 13:43 ? 00:00:00 nginx: worker process
root 10092 9917 0 14:05 pts/1 00:00:00 grep nginx
[root@localhost sbin]# kill -WINCH 9944
[root@localhost sbin]#
[root@localhost sbin]#
[root@localhost sbin]#
[root@localhost sbin]# ps -ef |grep nginx
root 9944 1 0 13:22 ? 00:00:00 nginx: master process ./nginx
root 10012 9944 0 13:43 ? 00:00:00 nginx: master process ./nginx
nobody 10013 10012 0 13:43 ? 00:00:00 nginx: worker process
root 10094 9917 0 14:06 pts/1 00:00:00 grep nginx
После того как старый номер основного процесса получает сигнал WINCH, старый рабочий процесс, управляемый старым номером процесса, корректно завершается. То есть по истечении определенного периода времени все старые рабочие процессы закрываются, и только новые рабочие процессы обрабатывают соединения запросов. В настоящее время вы все еще можете восстановить старую службу процесса, поскольку прослушивающий сокет старого процесса еще не остановлен.
Отправьте сигнал QUIT старому основному процессу для завершения его работы.
[root@localhost sbin]# kill -QUIT 9944
[root@localhost sbin]# ps -ef |grep nginx
root 10012 1 0 13:43 ? 00:00:00 nginx: master process ./nginx
nobody 10013 10012 0 13:43 ? 00:00:00 nginx: worker process
root 10118 9917 0 14:16 pts/1 00:00:00 grep nginx
После отправки сигнала QUIT старому основному процессу старый основной процесс завершает работу и удаляет файл logs/nginx.pid.oldbin. Обновление nginx завершено.