原文位址:http://zachary-guo.iteye.com/blog/1358312
● Nginx 的啟動
假設 nginx 安裝在 /usr/local/nginx 目錄中,那麼啟動 nginx 的指令就是:
Command代碼
[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
[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 配置檔案的文法是否正确的。否則 nginx 将不會加載新的配置檔案。可以通過以下指令來判斷配置檔案是否正确:
# -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 将繼續使用舊的配置檔案進行工作。
● Nginx 的信号控制
TERM, INT 快速關閉
QUIT 從容關閉
HUP 平滑重新開機,重新加載配置檔案
USR1 重新打開日志檔案,在切割日志時用途較大
USR2 平滑更新可執行程式
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 信号給舊的主程序,使其退出而隻留下新的伺服器運作。