在Linux平台下,控制Nginx服務的啟停有多種方法
2.3.1 Nginx服務的信號控制
在Nginx服務的啟停辦法中,有一類是通過信號機制來實現的,Nginx服務器的信號控制如下:
Nginx服務在運行時,會保持一個主進程和一個或多個 worker process 工作進程。通過給Nginx服務的主進程發送信號就可以控制服務的啟停了。
獲取nginx主進程的進程號 PID:
①Nginx服務啟動以后,默認在Nginx服務器安裝目錄下的logs目錄中會產生文件名為 nginx.pid 的文件,此文件中保持的就是Nginx服務主進程的PID.
這個文件的存放路徑和文件名都可以在Nginx服務器的配置文件中進行配置。
②使用Linux的查看進程工具 ps ps -ef | grep nginx
Nginx服務主進程能夠接收的信號如下:
TERM或INT:快速停止Nginx服務
QUIT:平緩停止Nginx服務
HUP:使用新的配置文件啟動進程,之后平緩停止原有進程,就是'平滑重啟'
USR1:重新打開日志文件,常用於日志切割
USR2:使用新版本的Nginx文件啟動服務,之后平緩停止原有Nginx進程,也就是’平滑升級‘
WINCH:平緩停止 worker process,用於 Nginx 服務器平滑升級
向Nginx主進程發送信號的兩種方法:1⃣️使用nginx二進制文件 2⃣️使用kill命令發送信號
kill SIGNAL PID
SIGNAL:指定信號,即QUIT、HUP、TERM或INT、USR1、USR2、WINCH中的某一個
PID:指定Nginx服務主進程的PID,也可以使用 nginx.pid 動態獲取 PID號
kill SIGNAL 'filepath' filepath為nginx.pid的路徑
2.3.2 Nginx服務的啟動
二進制文件nginx的相關用法:
-h或-? :用來打印二進制文件 nginx 的用法,就是上面顯示的內容
-v :用來顯示Nginx服務器的版本號
-V:除了顯示版本號,還顯示Nginx服務器編譯情況
-t:檢查Nginx服務器配置文件是否有語法錯誤,可以與 "-c" 聯用,使輸出內容更詳細
-q與-t 聯用:如果配置文件無錯誤,將不輸出上面的內容
-s signal:向Nginx服務的主進程發送信號
-p prefix:用來改變Nginx的安裝路徑。常用在平滑升級Nginx服務器的場合
-c filename:用來指定啟動Nginx服務使用的配置文件
-g directives:用來補充Nginx配置文件,向Nginx服務指定啟動時應用於全局的配置
使用 ps -ef | grep nginx 查看Nginx服務的進程狀態
2.3.3 Nginx服務的停止
停止Nginx服務的兩種方法:
一種是快速停止:快速停止是指立即停止當前Nginx服務正在處理的所有網絡請求,馬上丟棄連接,停止工作。
一種是平緩停止:平緩停止是指允許Nginx服務將當前正在處理的網絡請求處理完成,但不再接收新的請求,之后關閉連接,停止工作。
停止Nginx服務的操作:
發送信號:./sbin/Nginx -g TERM | INT | QUIT -------》TERM 和 INT 信號用於快速停止,QUIT用於平緩停止
或者:
kill TERM | INT | QUIT '/Nginx/logs/nginx.pid'
也可以使用 kill 命令向 Nginx進程發送 -9 或者 SIGNKILL 信號強制關閉 Nginx服務
kill -9 | SIGKILL '/Nginx/logs/nginx.pid' 不建議這樣使用
2.3.4 Nginx服務的重啟
更改Nginx服務器的配置和加入新模塊后,希望當前的Nginx服務應用新的配置或使新模塊生效,就需要重啟Nginx服務,然后使用新的Nginx配置文件重啟服務。
Nginx服務的平滑重啟:
平滑重啟的過程,Nginx服務進程接收到信號后,首先讀取新的Nginx配置文件,如果配置語法正確,則啟動新的Nginx服務然后平緩關閉舊的服務進程;
如果新的Nginx配置有問題,將顯示錯誤,仍然使用舊的Nginx進程提供服務。
使用以下命令實現Nginx服務的平滑重啟:
./sbin/nginx -g HUP [-c newConfFile]
HUP信號用於發送平滑重啟信號
newConfFile 可選項,用於指定新配置文件的路徑
或者使用新的配置文件代替了舊的配置文件后,使用如下命令
kill HUP '/Nginx/logs/nginx.pid' ----也可以實現平滑重啟
2.3.5 Nginx服務的升級
如果要對當前的Nginx服務器進行版本升級,應用新模塊,最簡單的辦法是停止當前Nginx服務,然后開啟新的Nginx服務,但這樣就會導致在一段時間內,用戶無法訪問服務器。為了解決這個問題,Nginx服務器提供平滑升級的功能
平滑升級的過程:Nginx服務接收到 USR2 信號后,首先將舊的 nginx.pid文件(如果在配置文件中更改過這個文件的名字,也是相同的過程)添加后綴 .oldbin,變成 nginx.pid.oldbin 文件;然后執行新版本Nginx服務器的二進制文件啟動服務。如果新的服務啟動成功,系統中將有新舊兩個Nginx服務共同提供Web服務。之后,需要向舊的Nginx服務進程發送 WINCH 信號,使舊的Nginx服務平滑停止,並刪除 nginx.pid.oldbin文件。在發送 WINCH 信號之前,可以隨時停止新的 Nginx服務。
注意:為了實現Nginx服務器的平滑升級,新的服務器安裝路徑應該和舊的保持一致。因此在安裝新服務器之前先備份舊服務器。由於某些原因無法保證新舊服務器安裝路徑一致,則可以先使用以下命令將舊服務器的安裝路徑更改為新服務器的安裝路徑:
./Nginx/nginx -p newInstallPath
newInstallPath為新服務器的安裝路徑。之后備份舊服務器安裝新服務器即可
做好准備工作后,使用以下命令實現Nginx服務的平滑升級:
./sbin/Nginx -g USR2
其中,USR2信號用於發送平滑升級信號,或者使用:
kill USR2 '/Nginx/logs/nginx.pid'
通過 ps -ef | grep nginx 查看新的Nginx服務啟動正常,再使用
./sbin/Nginx -g WINCH --------其中 WINCH 信號用於發送平滑停止舊服務信號,或者 使用:
kill WINCH '/Nginx/logs/nginx.pid'
這樣就在不停止提供 Web 服務的前提下完成了 Nginx 服務器的平滑升級
