Nginx 的啓動、中止、平滑重啓、信號控制和平滑升級

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

[root@localhost ~]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

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

● Nginx 的中止
       nginx 的中止方法有不少,通常經過發送系統信號給 nginx 的主進程的方式來中止 nginx。nginx

               (1) 從容中止 nginx
服務器



[root@localhost ~]# kill -QUIT 【Nginx主進程號】

       或

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


               (2) 快速中止 nginx

[root@localhost ~]# kill -TERM 【Nginx主進程號】

       或

[root@localhost ~]# kill -INT 【Nginx主進程號】


               (3) 強制中止全部 nginx 進程

[root@localhost ~]# pkill -9 nginx

● Nginx 的平滑重啓
       若是改變了 nginx 的配置文件,想重啓 nginx,一樣能夠發送系統信號給 nginx 主進程的方式來進行。不過,重啓以前,要確認 nginx 配置文件的語法是否正確的。Linux下Nginx+PHP+MySQL配置詳解。不然 nginx 將不會加載新的配置文件。能夠經過如下命令來判斷配置文件是否正確:
ide



# -t 參數將檢查配置文件的語法是否正確,默認會檢查 /usr/local/nginx/conf/nginx.conf 文件。
[root@localhost ~]# /usr/local/nginx/sbin/nginx -t
# 若是要對指定的配置文件進行語法檢查,能夠繼續添加 -c 參數
[root@localhost ~]# /usr/local/nginx/sbin/nginx -t -c /home/a/b/c/my-nginx.conf

       這個時候,就能夠平滑重啓 nginx 了。

[root@localhost ~]# kill -HUP 【Nginx主進程號】

       當 nginx 接收到 HUP 信號時,它會嘗試先解析配置文件,若是成功,就應用新的配置文件(例如,從新打開日誌文件或監聽的套接字)。以後,nginx 運行新的工做進程並從容關閉舊的工做進程。通知工做進程關閉監聽套接字,可是繼續爲當前鏈接的客戶提供服務。 nginx配置虛擬主機(2) - ttlsa教程系列之nginx 。全部的客戶端的服務完成後,舊的工做進程被關閉。若是新的配置文件應用失敗,nginx 將繼續使用舊的配置文件進行工做。

● Nginx 的信號控制
spa

   TERM, INT 快速關閉日誌

   QUIT 從容關閉htm

   HUP 平滑重啓,從新加載配置文件教程

   USR1 從新打開日誌文件,在切割日誌時用途較大進程

   USR2 平滑升級可執行程序get

   WINCH 從容關閉工做進程


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

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

       (2) 發送如下指令:



[root@localhost ~]# kill -USR2 【舊頒佈的Nginx主進程號】


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

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



kill -WINCH 【舊版本的Nginx主進程號】


       (5) 一段時間後,舊的工做進程(worker process)處理了全部已鏈接的請求後退出,僅由新的工做進程來處理輸入的請求了。

       (6) 這時候,咱們能夠決定是使用新版本,仍是恢復到舊版本:
             kill -HUP 【舊的主進程號】:nginx 將在不重載配置文件的狀況下啓動它的工做進程
             kill -QUIT 【新的主進程號】:從容關閉其工做進程(worker process)
             kill -TERM 【新的主進程號】:強制退出
             kill 【新的主進程號或舊的主進程號】:若是由於某些緣由新的工做進程不能退出,則向其發送 kill 信號

       新的主進程退出後,舊的主進程會移除 .oldbin 後綴,恢復爲它 的 .pid 文件,這樣,一切就恢復到升級以前了。若是嘗試升級成功,而你也但願保留新的服務器時,可發送 QUIT 信號給舊的主進程,使其退出而只留下新的服務器運行, .oldbin 後綴文件會被移除

相關文章
相關標籤/搜索