不像許多其他軟件系統(tǒng),Nginx 僅有幾個命令行參數(shù),完全通過配置文件來配置
可以使用信號系統(tǒng)來控制主進程。默認,nginx 將其主進程的 pid 寫入到 ?/usr/local/nginx/nginx.pid
? 文件中。通過傳遞參數(shù)給 ./configure 或使用 pid 指令,來改變該文件的位置。
TERM, INT | 快速關(guān)閉 |
QUIT | 從容關(guān)閉 |
HUP | 重載配置
用新的配置開始新的工作進程 從容關(guān)閉舊的工作進程 |
USR1 | 重新打開日志文件 |
USR2 | 平滑升級可執(zhí)行程序。 |
WINCH | 從容關(guān)閉工作進程 |
盡管你不必自己操作工作進程,但是,它們也支持一些信號:
TERM, INT | 快速關(guān)閉 |
QUIT | 從容關(guān)閉 |
USR1 | 重新打開日志文件 |
sudo /usr/local/nginx/nginx
(nginx二進制文件絕對路徑,可以根據(jù)自己安裝路徑實際決定)
nginx從容停止命令,等所有請求結(jié)束后關(guān)閉服務(wù)
ps -ef |grep nginx
kill -QUIT nginx 主進程號
nginx 快速停止命令,立刻關(guān)閉 nginx 進程
ps -ef |grep nginx
kill -TERM nginx 主進程號
如果以上命令不管用,可以強制停止
kill -9 nginx主進程號
如果嫌麻煩可以不用查看進程號,直接使用命令進行操作
其中?/usr/local/nginx/nginx.pid 為nginx.conf
?中 ?pid
?命令設(shè)置的參數(shù),用來存放 nginx 主進程號的文件
kill -信號類型(HUP|TERM|QUIT) `cat /usr/local/nginx/nginx.pid`
例如
kill -QUIT `cat /usr/local/nginx/nginx.pid`
nginx重啟可以分成幾種類型
1.簡單型,先關(guān)閉進程,修改你的配置后,重啟進程。
kill -QUIT `cat /usr/local/nginx/nginx.pid`
sudo /usr/local/nginx/nginx
2.重新加載配置文件,不重啟進程,不會停止處理請求
3.平滑更新nginx二進制,不會停止處理請求
Nginx 支持幾個信號,能在它運行時控制其操作。其中最普通的是 15 ,用來中止運行的進程:
# ps aux | egrep '(PID|nginx)'
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 2213 0.0 0.0 6784 2036 ? Ss 03:01 0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
# kill -15 2213
而最有趣的是能平滑改變 nginx 配置的選項(請注意,在重載前,要先測試一下配置文件):
# nginx -t -c /etc/nginx/nginx.conf
2006/09/16 13:07:10 [info] 15686#0: the configuration file /etc/nginx/nginx.conf syntax is ok
2006/09/16 13:07:10 [info] 15686#0: the configuration file /etc/nginx/nginx.conf was tested successfully
# ps aux | egrep '(PID|nginx)'
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 2213 0.0 0.0 6784 2036 ? Ss 03:01 0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
# kill -HUP 2213
當 nginx 接收到 HUP 信號,它會嘗試先解析配置文件(如果指定配置文件,就使用指定的,否則使用默認的),成功的話,就應(yīng)用新的配置文件(例如:重新打開日志文件或監(jiān)聽的套接 字)。之后,nginx 運行新的工作進程并從容關(guān)閉舊的工作進程。通知工作進程關(guān)閉監(jiān)聽套接字但是繼續(xù)為當前連接的客戶提供服務(wù)。所有客戶端的服務(wù)完成后,舊的工作進程被關(guān)閉。 如果新的配置文件應(yīng)用失敗,nginx 將繼續(xù)使用舊的配置進行工作。
你可以在不中斷服務(wù)的情況下 - 新的請求也不會丟失,使用新的 nginx 可執(zhí)行程序替換舊的(當升級新版本或添加/刪除服務(wù)器模塊時)。
首先,使用新的可執(zhí)行程序替換舊的(最好做好備份),然后,發(fā)送 USR2 (kill -USR2 pid)信號給主進程。主進程將重命名它的 .pid 文件為 .oldbin (比如:?/usr/local/nginx/logs/nginx.pid.oldbin)
?,然后執(zhí)行新的可執(zhí)行程序,依次啟動新的主進程和新的工作進程:
PID PPID USER %CPU VSZ WCHAN COMMAND
33126 1 root 0.0 1164 pause nginx: master process /usr/local/nginx/sbin/nginx
33134 33126 nobody 0.0 1368 kqread nginx: worker process (nginx)
33135 33126 nobody 0.0 1380 kqread nginx: worker process (nginx)
33136 33126 nobody 0.0 1368 kqread nginx: worker process (nginx)
36264 33126 root 0.0 1148 pause nginx: master process /usr/local/nginx/sbin/nginx
36265 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)
36266 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)
36267 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)
在這時,兩個 nginx 實例會同時運行,一起處理輸入的請求。要逐步停止舊的實例,你必須發(fā)送 WINCH 信號給舊的主進程,然后,它的工作進程就將開始從容關(guān)閉:
PID PPID USER %CPU VSZ WCHAN COMMAND
33126 1 root 0.0 1164 pause nginx: master process /usr/local/nginx/sbin/nginx
33135 33126 nobody 0.0 1380 kqread nginx: worker process is shutting down (nginx)
36264 33126 root 0.0 1148 pause nginx: master process /usr/local/nginx/sbin/nginx
36265 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)
36266 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)
36267 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)
一段時間后,舊的工作進程處理了所有已連接的請求后退出,就僅由新的工作進程來處理輸入的請求了:
PID PPID USER %CPU VSZ WCHAN COMMAND
33126 1 root 0.0 1164 pause nginx: master process /usr/local/nginx/sbin/nginx
36264 33126 root 0.0 1148 pause nginx: master process /usr/local/nginx/sbin/nginx
36265 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)
36266 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)
36267 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)
這時,因為舊的服務(wù)器還尚未關(guān)閉它監(jiān)聽的套接字,所以,通過下面的幾步,你仍可以恢復(fù)舊的服務(wù)器:
發(fā)送 HUP 信號給舊的主進程 - 它將在不重載配置文件的情況下啟動它的工作進程
發(fā)送 QUIT 信號給新的主進程,要求其從容關(guān)閉其工作進程
發(fā)送 TERM 信號給新的主進程,迫使其退出
如果因為某些原因新的工作進程不能退出,向其發(fā)送 KILL 信號
新的主進程退出后,舊的主進程會由移除 .oldbin 前綴,恢復(fù)為它的 .pid 文件,這樣,一切就都恢復(fù)到升級之前了。
如果嘗試升級成功,而你也希望保留新的服務(wù)器時,發(fā)送 QUIT 信號給舊的主進程使其退出而只留下新的服務(wù)器運行:
PID PPID USER %CPU VSZ WCHAN COMMAND
36264 1 root 0.0 1148 pause nginx: master process /usr/local/nginx/sbin/nginx
36265 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)
36266 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)
36267 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)
更多建議: