鍍金池/ 教程/ Linux/ Nginx進(jìn)程和運(yùn)行時(shí)控制
Nginx安裝
Nginx內(nèi)容緩存
Nginx架構(gòu)
Nginx進(jìn)程和運(yùn)行時(shí)控制
Nginx配置虛擬機(jī)
Nginx從源碼構(gòu)建安裝配置
為什么需要Nginx?
Nginx配置文件
Nginx壓縮和解壓
Nginx+PHP7+MySQL5.7(LNMP)環(huán)境配置
Nginx反向代理
Nginx+PHP7源碼安裝配置
Nginx快速入門
Nginx的優(yōu)勢(shì)(優(yōu)點(diǎn))
Nginx教程
Nginx特性
Nginx配置Web服務(wù)器
Nginx配置日志
Nginx配置靜態(tài)內(nèi)容服務(wù)器
Nginx主要應(yīng)用場(chǎng)景(必讀)
Nginx安裝(從Linx包安裝)

Nginx進(jìn)程和運(yùn)行時(shí)控制

本節(jié)介紹NGINX在運(yùn)行時(shí)啟動(dòng)的過程以及如何控制它們。

在這個(gè)部分中,主要涉及兩個(gè)部分的內(nèi)容:

  • 主進(jìn)程和工作進(jìn)程
  • 控制NGINX

1. 主進(jìn)程和工作進(jìn)程

NGINX有一個(gè)主進(jìn)程和一個(gè)或多個(gè)工作進(jìn)程。 如果啟用緩存,緩存加載程序和緩存管理器進(jìn)程也將在啟動(dòng)時(shí)運(yùn)行。
主程序的主要目的是讀取和評(píng)估配置文件以及維護(hù)工作進(jìn)程。

工作進(jìn)程執(zhí)行請(qǐng)求的實(shí)際處理。 NGINX依賴于操作系統(tǒng)的機(jī)制來有效地在工作進(jìn)程之間分配請(qǐng)求。 工作進(jìn)程的數(shù)量可在nginx.conf配置文件中定義,可以針對(duì)給定的配置進(jìn)行修復(fù),或者自動(dòng)調(diào)整為可用CPU內(nèi)核數(shù)(請(qǐng)參閱worker_processes)。

2. 控制NGINX

要重新加載配置文件,可以停止或重新啟動(dòng)NGINX,或者發(fā)送信號(hào)到主進(jìn)程。 可以使用-s參數(shù)運(yùn)行nginx命令(調(diào)用NGINX可執(zhí)行文件)來發(fā)送信號(hào)。

nginx -s signal

信號(hào)的值可以是以下之一:

  • quit – 正常地關(guān)閉
  • reload – 重新加載配置文件
  • reopen – 重新打開日志文件
  • stop – 立即關(guān)閉(快速關(guān)閉)

殺死實(shí)用程序也可以使用,將信號(hào)直接發(fā)送到主進(jìn)程。 默認(rèn)情況下,主進(jìn)程的進(jìn)程ID被寫入位于/usr/local/nginx/logs/var/run目錄中的nginx.pid文件。
nginx可以用信號(hào)控制。 默認(rèn)情況下,主進(jìn)程的進(jìn)程ID將寫入文件/usr/local/nginx/logs/nginx.pid。 該名稱可能在配置時(shí)更改,或使用pid指令在nginx.conf文件中進(jìn)行更改。主程序支持以下信號(hào):

  • TERM, INT - 快速關(guān)閉
  • QUIT - 正常關(guān)閉
  • HUP - 改變配置,跟上改變的時(shí)區(qū)(僅適用于FreeBSD和Linux),使用新配置啟動(dòng)新的工作進(jìn)程,正常關(guān)閉舊的工作進(jìn)程
  • USR1 - 重新打開日志文件
  • USR2 - 升級(jí)可執(zhí)行文件
  • WINCH - 正常關(guān)閉工作進(jìn)程

個(gè)別工作進(jìn)程可以用信號(hào)來控制,盡管這不是必需的。 支持的信號(hào)有:

  • TERM, INT - 快速關(guān)閉
  • QUIT - 正常關(guān)閉
  • USR1 - 重新打開日志文件
  • WINCH - 調(diào)試異常終止(需要啟用debug_points)

更改配置

為了使nginx重新讀取配置文件,應(yīng)將HUP信號(hào)發(fā)送到主進(jìn)程。 主進(jìn)程首先檢查語法有效性,然后嘗試應(yīng)用新配置,即打開日志文件和新的監(jiān)聽套接字。 如果失敗,它會(huì)回滾更改,并繼續(xù)使用舊配置。 如果此操作成功,它將啟動(dòng)新的工作進(jìn)程,并向舊的工作進(jìn)程發(fā)送消息,請(qǐng)求它們正常關(guān)閉。 舊工作進(jìn)程密切監(jiān)聽套接字,并繼續(xù)為舊客戶端服務(wù)。 在所有客戶端被服務(wù)之后,舊的工作進(jìn)程被關(guān)閉。

我們來舉例說明一下。 想象一下,nginx是在FreeBSD 4.x上運(yùn)行,執(zhí)行以下命令:

ps axw -o pid,ppid,user,%cpu,vsz,wchan,command | egrep '(nginx|PID)'

產(chǎn)生以下輸出:

  PID  PPID USER    %CPU   VSZ WCHAN  COMMAND
33126     1 root     0.0  1148 pause  nginx: master process /usr/local/nginx/sbin/nginx
33127 33126 nobody   0.0  1380 kqread nginx: worker process (nginx)
33128 33126 nobody   0.0  1364 kqread nginx: worker process (nginx)
33129 33126 nobody   0.0  1364 kqread nginx: worker process (nginx)

如果將HUP發(fā)送到主進(jìn)程,則輸出變?yōu)椋?/p>

  PID  PPID USER    %CPU   VSZ WCHAN  COMMAND
33126     1 root     0.0  1164 pause  nginx: master process /usr/local/nginx/sbin/nginx
33129 33126 nobody   0.0  1380 kqread nginx: worker process is shutting down (nginx)
33134 33126 nobody   0.0  1368 kqread nginx: worker process (nginx)
33135 33126 nobody   0.0  1368 kqread nginx: worker process (nginx)
33136 33126 nobody   0.0  1368 kqread nginx: worker process (nginx)

PID 33129的老工作流程仍然繼續(xù)運(yùn)行。 一段時(shí)間后,它退出:

 PID  PPID USER    %CPU   VSZ WCHAN  COMMAND
33126     1 root     0.0  1164 pause  nginx: master process /usr/local/nginx/sbin/nginx
33134 33126 nobody   0.0  1368 kqread nginx: worker process (nginx)
33135 33126 nobody   0.0  1368 kqread nginx: worker process (nginx)
33136 33126 nobody   0.0  1368 kqread nginx: worker process (nginx)

循環(huán)日志文件
要循環(huán)日志文件,需要首先重命名。 之后,USR1信號(hào)應(yīng)發(fā)送到主進(jìn)程。 然后,主進(jìn)程將重新打開所有當(dāng)前打開的日志文件,并將其分配給正在運(yùn)行的工作進(jìn)程的非特權(quán)用戶作為所有者。 成功重新打開后,主程序關(guān)閉所有打開的文件,并將消息發(fā)送到工作進(jìn)程,要求他們重新打開文件。 工作進(jìn)程也會(huì)打開新文件并立即關(guān)閉舊文件。 因此,舊文件幾乎立即可用于后處理,如壓縮。