更新時(shí)間:2021年07月15日17時(shí)33分 來源:傳智教育 瀏覽次數(shù):
Nginx服務(wù)器啟停命令
Nginx安裝完成后,接下來我們要學(xué)習(xí)的是如何啟動(dòng)、重啟和停止Nginx的服務(wù)。對(duì)于Nginx的啟停在linux系統(tǒng)中也有很多種方式,我們本次課程介紹兩種方式:
1.Nginx服務(wù)的信號(hào)控制
2.Nginx的命令行控制
前面在提到Nginx的高性能,其實(shí)也和它的架構(gòu)模式有關(guān)。Nginx默認(rèn)采用的是多進(jìn)程的方式來工作的,當(dāng)將Nginx啟動(dòng)后,我們通過ps -ef |grep nginx命令可以查看到如下內(nèi)容:
從上圖中可以看到,Nginx后臺(tái)進(jìn)程中包含一個(gè)master進(jìn)程和多個(gè)worker進(jìn)程,master進(jìn)程主要用來管理worker進(jìn)程,包含接收外界的信息,并將接收到的信號(hào)發(fā)送給各個(gè)worker進(jìn)程,監(jiān)控worker進(jìn)程的狀態(tài),當(dāng)worker進(jìn)程出現(xiàn)異常退出后,會(huì)自動(dòng)重新啟動(dòng)新的worker進(jìn)程。而worker進(jìn)程則是專門用來處理用戶請(qǐng)求的,各個(gè)worker進(jìn)程之間是平等的并且相互獨(dú)立,處理請(qǐng)求的機(jī)會(huì)也是一樣的。nginx的進(jìn)程模型,我們可以通過下圖來說明下:
我們現(xiàn)在作為管理員,只需要通過給master進(jìn)程發(fā)送信號(hào)就可以來控制Nginx,這個(gè)時(shí)候我們需要有兩個(gè)前提條件,一個(gè)是要操作的master進(jìn)程,一個(gè)是信號(hào)。
(1)要想操作Nginx的master進(jìn)程,就需要獲取到master進(jìn)程的進(jìn)程號(hào)ID。獲取方式簡(jiǎn)單介紹兩個(gè),
·通過ps -ef | grep nginx;
·在講解nginx的./configure的配置參數(shù)的時(shí)候,有一個(gè)參數(shù)是--pid-path=PATH默認(rèn)是/usr/local/nginx/logs/nginx.pid,所以可以通過查看該文件來獲取nginx的master進(jìn)程ID.
(2)信號(hào)
信號(hào) |
作用 |
TERM/INT | 立即關(guān)閉整個(gè)服務(wù) |
QUIT | "優(yōu)雅"地關(guān)閉整個(gè)服務(wù) |
HUP | 重讀配置文件并使用服務(wù)對(duì)新配置項(xiàng)生效 |
USR1 | 重新打開日志文件,可以用來進(jìn)行日志切割 |
USR2 | 平滑升級(jí)到最新版的nginx |
WINCH | 所有子進(jìn)程不在接收處理新連接,相當(dāng)于給work進(jìn)程發(fā)送QUIT指令 |
調(diào)用命令為kill -signal PID
signal:即為信號(hào);PID即為獲取到的master線程ID
1.發(fā)送TERM/INT信號(hào)給master進(jìn)程,會(huì)將Nginx服務(wù)立即關(guān)閉。
kill -TERM PID / kill -TERM `cat /usr/local/nginx/logs/nginx.pid` kill -INT PID / kill -INT `cat /usr/local/nginx/logs/nginx.pid`
2.發(fā)送QUIT信號(hào)給master進(jìn)程,master進(jìn)程會(huì)控制所有的work進(jìn)程不再接收新的請(qǐng)求,等所有請(qǐng)求處理完后,在把進(jìn)程都關(guān)閉掉。
kill -QUIT PID / kill -TERM `cat /usr/local/nginx/logs/nginx.pid`
3.發(fā)送HUP信號(hào)給master進(jìn)程,master進(jìn)程會(huì)把控制舊的work進(jìn)程不再接收新的請(qǐng)求,等處理完請(qǐng)求后將舊的work進(jìn)程關(guān)閉掉,然后根據(jù)nginx的配置文件重新啟動(dòng)新的work進(jìn)程
kill -HUP PID / kill -TERM `cat /usr/local/nginx/logs/nginx.pid`
4.發(fā)送USR1信號(hào)給master進(jìn)程,告訴Nginx重新開啟日志文件
kill -USR1 PID / kill -TERM `cat /usr/local/nginx/logs/nginx.pid`
5.發(fā)送USR2信號(hào)給master進(jìn)程,告訴master進(jìn)程要平滑升級(jí),這個(gè)時(shí)候,會(huì)重新開啟對(duì)應(yīng)的master進(jìn)程和work進(jìn)程,整個(gè)系統(tǒng)中將會(huì)有兩個(gè)master進(jìn)程,并且新的master進(jìn)程的PID會(huì)被記錄在/usr/local/nginx/logs/nginx.pid而之前的舊的master進(jìn)程PID會(huì)被記錄在/usr/local/nginx/logs/nginx.pid.oldbin文件中,接著再次發(fā)送QUIT信號(hào)給舊的master進(jìn)程,讓其處理完請(qǐng)求后再進(jìn)行關(guān)閉
kill -USR2 PID / kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`
kill -QUIT PID / kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`
6.發(fā)送WINCH信號(hào)給master進(jìn)程,讓master進(jìn)程控制不讓所有的work進(jìn)程在接收新的請(qǐng)求了,請(qǐng)求處理完后關(guān)閉work進(jìn)程。注意master進(jìn)程不會(huì)被關(guān)閉掉
kill -WINCH PID /kill -WINCH`cat /usr/local/nginx/logs/nginx.pid`
此方式是通過Nginx安裝目錄下的sbin下的可執(zhí)行文件nginx來進(jìn)行Nginx狀態(tài)的控制,我們可以通過nginx -h來查看都有哪些參數(shù)可以用:
-?和-h:顯示幫助信息
-v:打印版本號(hào)信息并退出
-V:打印版本號(hào)信息和配置信息并退出
-t:測(cè)試nginx的配置文件語(yǔ)法是否正確并退出
-T:測(cè)試nginx的配置文件語(yǔ)法是否正確并列出用到的配置文件信息然后退出
-q:在配置測(cè)試期間禁止顯示非錯(cuò)誤消息
-s:signal信號(hào),后面可以跟 :
stop[快速關(guān)閉,類似于TERM/INT信號(hào)的作用]
quit[優(yōu)雅的關(guān)閉,類似于QUIT信號(hào)的作用]
reopen[重新打開日志文件類似于USR1信號(hào)的作用]
reload[類似于HUP信號(hào)的作用]
-p:prefix,指定Nginx的prefix路徑,(默認(rèn)為: /usr/local/nginx/)
-c:filename,指定Nginx的配置文件路徑,(默認(rèn)為: conf/nginx.conf)
-g:用來補(bǔ)充Nginx配置文件,向Nginx服務(wù)指定啟動(dòng)時(shí)應(yīng)用全局的配置
北京校區(qū)