Nginx 的啟動、停止、平滑重啟、信號控制和平滑升級


● Nginx 的啟動 
        假設 nginx 安裝在 /usr/local/nginx 目錄中,那么啟動 nginx 的命令就是: 

Command代碼   收藏代碼
  1. [root@localhost ~]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf  

        參數 "-c" 指定了配置文件的路徑,如果不加 "-c" 參數,Nginx 會默認加載其安裝目錄的 conf 子目錄中的 nginx.conf 文件。 


    ● Nginx 的停止 
        nginx 的停止方法有很多,一般通過發送系統信號給 nginx 的主進程的方式來停止 nginx。 

                (1) 從容停止 nginx 

Command代碼   收藏代碼
  1. [root@localhost ~]# kill -QUIT 【Nginx主進程號】  

        或 

Command代碼   收藏代碼
  1. # ` 字符是數字鍵盤 1 字符左邊的那個字符,不需要 Shift,直接按 ` 字符即可。  
  2. # 如果在 nginx.conf 配置文件中指定了 pid 文件存放的路徑,該文件中存放的就是 nginx 當前的主進程號。默認是放在 nginx 安裝目錄的 logs 目錄下。  
  3. [root@localhost ~]# kill -QUIT `/usr/local/nginx/logs/nginx.pid`  


                (2) 快速停止 nginx 

Command代碼   收藏代碼
  1. [root@localhost ~]# kill -TERM 【Nginx主進程號】  

        或 

Command代碼   收藏代碼
  1. [root@localhost ~]# kill -INT 【Nginx主進程號】  


                (3) 強制停止所有 nginx 進程 

Command代碼   收藏代碼
  1. [root@localhost ~]# pkill -9 nginx  



    ● Nginx 的平滑重啟 
        如果改變了 nginx 的配置文件,想重啟 nginx,同樣可以發送系統信號給 nginx 主進程的方式來進行。不過,重啟之前,要確認 nginx 配置文件的語法是否正確的。否則 nginx 將不會加載新的配置文件。可以通過以下命令來判斷配置文件是否正確: 

Command代碼   收藏代碼
  1. # -t 參數將檢查配置文件的語法是否正確,默認會檢查 /usr/local/nginx/conf/nginx.conf 文件。  
  2. [root@localhost ~]# /usr/local/nginx/sbin/nginx -t  
  3. # 如果要對指定的配置文件進行語法檢查,可以繼續添加 -c 參數  
  4. [root@localhost ~]# /usr/local/nginx/sbin/nginx -t -c /home/a/b/c/my-nginx.conf  

        這個時候,就可以平滑重啟 nginx 了。 

Command代碼   收藏代碼
  1. [root@localhost ~]# kill -HUP 【Nginx主進程號】  

        當 nginx 接收到 HUP 信號時,它會嘗試先解析配置文件,如果成功,就應用新的配置文件(例如,重新打開日志文件或監聽的套接字)。之后,nginx 運行新的工作進程並從容關閉舊的工作進程。通知工作進程關閉監聽套接字,但是繼續為當前連接的客戶提供服務。所有的客戶端的服務完成后,舊的工作進程被關閉。如果新的配置文件應用失敗,nginx 將繼續使用舊的配置文件進行工作。 


    ● Nginx 的信號控制 

  •     TERM, INT 快速關閉
  •     QUIT 從容關閉
  •     HUP 平滑重啟,重新加載配置文件
  •     USR1 重新打開日志文件,在切割日志時用途較大
  •     USR2 平滑升級可執行程序
  •     WINCH 從容關閉工作進程


    ● Nginx 的平滑升級 
        當需要將正在運行中的 nginx 升級、添加/刪除服務器模塊時,可以在不中斷服務的情況下,使用新版本、重編譯的 nginx 可執行程序替換舊版本的課執行程序。步驟如下: 

        (1) 使用新的可執行程序替換舊的可執行程序,對於編譯安裝的 nginx,可以將新版本編譯安裝到舊版本的 nginx 安裝路徑中。替換之前,最好備份一下舊的可執行文件。 

        (2) 發送以下指令: 

Command代碼   收藏代碼
  1. [root@localhost ~]# kill -USR2 【舊頒布的Nginx主進程號】  


        (3) 舊版本 nginx 的主進程將重命名它的 pid 文件為 .oldbin(例如:/usr/local/nginx/logs/nginx.pid.oldbin),然后執行新版本的 nginx 可執行程序,依次啟動新的主進程和新的工作進程。 

        (4) 此時,新、舊版本的 nginx 實例會同時運行,共同處理輸入的請求。要逐步停止舊版本的 nginx 實例,你必須發送 WINCH 信號給舊的主進程,然后,它的工作進程就將開始從容關閉: 

Command代碼   收藏代碼
  1. kill -WINCH 【舊版本的Nginx主進程號】  


        (5) 一段時間后,舊的工作進程(worker process)處理了所有已連接的請求后退出,僅由新的工作進程來處理輸入的請求了。 

        (6) 這時候,我們可以決定是使用新版本,還是恢復到舊版本: 
              kill -HUP 【舊的主進程號】:nginx 將在不重載配置文件的情況下啟動它的工作進程 
              kill -QUIT 【新的主進程號】:從容關閉其工作進程(worker process) 
              kill -TERM 【新的主進程號】:強制退出 
              kill 【新的主進程號或舊的主進程號】:如果因為某些原因新的工作進程不能退出,則向其發送 kill 信號 

        新的主進程退出后,舊的主進程會移除 .oldbin 后綴,恢復為它 的 .pid 文件,這樣,一切就恢復到升級之前了。如果嘗試升級成功,而你也希望保留新的服務器時,可發送 QUIT 信號給舊的主進程,使其退出而只留下新的服務器運行。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM