運(yùn)行和控制 Nginx - 命令行參數(shù)和信號(hào)

2020-09-09 10:55 更新

nginx命令行參數(shù)

不像許多其他軟件系統(tǒng),Nginx 僅有幾個(gè)命令行參數(shù),完全通過配置文件來配置

  • -c </path/to/config> 為 Nginx 指定一個(gè)配置文件,來代替缺省的。
  • -t 不運(yùn)行,而僅僅測(cè)試配置文件。nginx 將檢查配置文件的語法的正確性,并嘗試打開配置文件中所引用到的文件。
  • -v 顯示 nginx 的版本。
  • -V 顯示 nginx 的版本,編譯器版本和配置參數(shù)。

nginx 控制信號(hào)

可以使用信號(hào)系統(tǒng)來控制主進(jìn)程。默認(rèn),nginx 將其主進(jìn)程的 pid 寫入到 ?/usr/local/nginx/nginx.pid? 文件中。通過傳遞參數(shù)給 ./configure 或使用 pid 指令,來改變?cè)撐募奈恢谩?/p>

主進(jìn)程可以處理以下的信號(hào):

TERM, INT 快速關(guān)閉
QUIT 從容關(guān)閉
HUP 重載配置
用新的配置開始新的工作進(jìn)程
從容關(guān)閉舊的工作進(jìn)程
USR1 重新打開日志文件
USR2 平滑升級(jí)可執(zhí)行程序。
WINCH 從容關(guān)閉工作進(jìn)程

盡管你不必自己操作工作進(jìn)程,但是,它們也支持一些信號(hào):

TERM, INT 快速關(guān)閉
QUIT 從容關(guān)閉
USR1 重新打開日志文件


nginx 啟動(dòng)、停止、重啟命令

nginx啟動(dòng)

sudo /usr/local/nginx/nginx    

 (nginx二進(jìn)制文件絕對(duì)路徑,可以根據(jù)自己安裝路徑實(shí)際決定)

 

nginx從容停止命令,等所有請(qǐng)求結(jié)束后關(guān)閉服務(wù)

ps -ef |grep nginx
kill -QUIT  nginx 主進(jìn)程號(hào) 

nginx 快速停止命令,立刻關(guān)閉 nginx 進(jìn)程

ps -ef |grep nginx
kill -TERM nginx 主進(jìn)程號(hào)  

如果以上命令不管用,可以強(qiáng)制停止

kill -9 nginx主進(jìn)程號(hào) 

如果嫌麻煩可以不用查看進(jìn)程號(hào),直接使用命令進(jìn)行操作

其中?/usr/local/nginx/nginx.pid 為nginx.conf?中 ?pid ?命令設(shè)置的參數(shù),用來存放 nginx 主進(jìn)程號(hào)的文件

kill -信號(hào)類型(HUP|TERM|QUIT) `cat /usr/local/nginx/nginx.pid` 

例如

kill -QUIT `cat /usr/local/nginx/nginx.pid`


nginx重啟命令

nginx重啟可以分成幾種類型

1.簡單型,先關(guān)閉進(jìn)程,修改你的配置后,重啟進(jìn)程。

kill -QUIT `cat /usr/local/nginx/nginx.pid`
sudo /usr/local/nginx/nginx

2.重新加載配置文件,不重啟進(jìn)程,不會(huì)停止處理請(qǐng)求

3.平滑更新nginx二進(jìn)制,不會(huì)停止處理請(qǐng)求

 

使用信號(hào)加載新的配置

Nginx 支持幾個(gè)信號(hào),能在它運(yùn)行時(shí)控制其操作。其中最普通的是 15 ,用來中止運(yùn)行的進(jìn)程:

# ps aux | egrep '(PID|nginx)'
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      2213  0.0  0.0   6784  2036 ?        Ss   03:01   0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
# kill -15 2213

而最有趣的是能平滑改變 nginx 配置的選項(xiàng)(請(qǐng)注意,在重載前,要先測(cè)試一下配置文件):


# nginx -t -c /etc/nginx/nginx.conf
2006/09/16 13:07:10 [info] 15686#0: the configuration file /etc/nginx/nginx.conf syntax is ok
2006/09/16 13:07:10 [info] 15686#0: the configuration file /etc/nginx/nginx.conf was tested successfully
# ps aux | egrep '(PID|nginx)'
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      2213  0.0  0.0   6784  2036 ?        Ss   03:01   0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
# kill -HUP 2213

當(dāng) nginx 接收到 HUP 信號(hào),它會(huì)嘗試先解析配置文件(如果指定配置文件,就使用指定的,否則使用默認(rèn)的),成功的話,就應(yīng)用新的配置文件(例如:重新打開日志文件或監(jiān)聽的套接 字)。之后,nginx 運(yùn)行新的工作進(jìn)程并從容關(guān)閉舊的工作進(jìn)程。通知工作進(jìn)程關(guān)閉監(jiān)聽套接字但是繼續(xù)為當(dāng)前連接的客戶提供服務(wù)。所有客戶端的服務(wù)完成后,舊的工作進(jìn)程被關(guān)閉。 如果新的配置文件應(yīng)用失敗,nginx 將繼續(xù)使用舊的配置進(jìn)行工作。

 

平滑升級(jí)到新的二進(jìn)制代碼

你可以在不中斷服務(wù)的情況下 - 新的請(qǐng)求也不會(huì)丟失,使用新的 nginx 可執(zhí)行程序替換舊的(當(dāng)升級(jí)新版本或添加/刪除服務(wù)器模塊時(shí))。

首先,使用新的可執(zhí)行程序替換舊的(最好做好備份),然后,發(fā)送 USR2 (kill -USR2 pid)信號(hào)給主進(jìn)程。主進(jìn)程將重命名它的 .pid 文件為 .oldbin (比如:?/usr/local/nginx/logs/nginx.pid.oldbin)?,然后執(zhí)行新的可執(zhí)行程序,依次啟動(dòng)新的主進(jìn)程和新的工作進(jìn)程:

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  1380 kqread nginx: worker process (nginx)
33136 33126 nobody   0.0  1368 kqread nginx: worker process (nginx)
36264 33126 root     0.0  1148 pause  nginx: master process /usr/local/nginx/sbin/nginx
36265 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)
36266 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)
36267 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)

在這時(shí),兩個(gè) nginx 實(shí)例會(huì)同時(shí)運(yùn)行,一起處理輸入的請(qǐng)求。要逐步停止舊的實(shí)例,你必須發(fā)送 WINCH 信號(hào)給舊的主進(jìn)程,然后,它的工作進(jìn)程就將開始從容關(guān)閉:

PID  PPID USER    %CPU   VSZ WCHAN  COMMAND
33126     1 root     0.0  1164 pause  nginx: master process /usr/local/nginx/sbin/nginx
33135 33126 nobody   0.0  1380 kqread nginx: worker process is shutting down (nginx)
36264 33126 root     0.0  1148 pause  nginx: master process /usr/local/nginx/sbin/nginx
36265 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)
36266 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)
36267 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)

一段時(shí)間后,舊的工作進(jìn)程處理了所有已連接的請(qǐng)求后退出,就僅由新的工作進(jìn)程來處理輸入的請(qǐng)求了:

PID  PPID USER    %CPU   VSZ WCHAN  COMMAND
33126     1 root     0.0  1164 pause  nginx: master process /usr/local/nginx/sbin/nginx
36264 33126 root     0.0  1148 pause  nginx: master process /usr/local/nginx/sbin/nginx
36265 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)
36266 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)
36267 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)

這時(shí),因?yàn)榕f的服務(wù)器還尚未關(guān)閉它監(jiān)聽的套接字,所以,通過下面的幾步,你仍可以恢復(fù)舊的服務(wù)器:

發(fā)送 HUP 信號(hào)給舊的主進(jìn)程 - 它將在不重載配置文件的情況下啟動(dòng)它的工作進(jìn)程

發(fā)送 QUIT 信號(hào)給新的主進(jìn)程,要求其從容關(guān)閉其工作進(jìn)程

發(fā)送 TERM 信號(hào)給新的主進(jìn)程,迫使其退出

如果因?yàn)槟承┰蛐碌墓ぷ鬟M(jìn)程不能退出,向其發(fā)送 KILL 信號(hào)

新的主進(jìn)程退出后,舊的主進(jìn)程會(huì)由移除 .oldbin 前綴,恢復(fù)為它的 .pid 文件,這樣,一切就都恢復(fù)到升級(jí)之前了。

如果嘗試升級(jí)成功,而你也希望保留新的服務(wù)器時(shí),發(fā)送 QUIT 信號(hào)給舊的主進(jìn)程使其退出而只留下新的服務(wù)器運(yùn)行:

PID  PPID USER    %CPU   VSZ WCHAN  COMMAND
36264     1 root     0.0  1148 pause  nginx: master process /usr/local/nginx/sbin/nginx
36265 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)
36266 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)
36267 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)