Nginx的平滑重啟
如果改變了Nginx的配置文件(nginx.conf),想重啟Nginx,可以發送系統信號給Nginx主進程的方式來進行。不過,在重啟之前,要確認Nginx配置文件的語法是正確的,可通過如下命令測試配置文件是否正確:
/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
如果配置文件不正確,屏幕會提示配置文件的第幾行出錯:
nginx:[emerg] invalid number of arguments in "autoindex" directive in /usr/local/nginx/conf/nginx.conf:29
nginx:configuration file /usr/local/nginx/conf/nginx.conf test failed
如果配置文件正確,屏幕將提示以下兩行信息:
the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
configuration file /usr/local/nginx/conf/nginx.conf test is successful
?
這時候,就可以平滑重啟了:
對于Nginx 0.8.x之前的版本?kill -HUP `cat /usr/local/nginx/nginx.pid`
對于Nginx 0.8.x之后的版本?/usr/local/webserver/nginx/sbin/nginx -s reload
?
?
Nginx的平滑升級
?
當需要將正運行的Nginx升級,可以在不中斷服務的情況下進行,具體步驟如下:
1、使用新的可執行程序替換舊的可執行程序。下載新的Nginx,重新編譯到舊版本的安裝路徑中。重編譯之前,先備份一下舊的可執行文件。
?
2、執行以下指令,他將存儲有舊版本主進程ID的文件重命名為.oldbin:
kill -USR2 舊版本的Nginx主進程號
一般情況下是這樣的:kill -USR2 `cat /usr/local/nginx/nginx.pid`
?可以用 ls /usr/local/nginx/logs來查看是否改名
3、執行新版本的Nginx可執行程序。
ulimit -SHn 65535
/usr/local/nginx/sbin/nginx
?
4、此時新舊版本的Nginx會同時運行,共同處理請求。要逐步停止舊版本的Nginx,必須發送WINCH信號給舊的主進程。然后,他的工作進程將從容關閉。
kill -WINCH 舊版本的Nginx主進程號
?
5、一段時間后,舊的工作進程處理完了所有的請求后退出,僅由新的進程來處理輸入請求了。可用下面的命令查看:
ps -ef | grep nginx
?
6、現在可以決定使用新版本還是恢復到舊版本:
kill -HUP 舊的主進程號 :Nginx在不重載配置文件的情況下啟動他的工作進程
kill -QUIT 新的主進程號 ?:從容關閉其工作進程
kill -TERM 新的主進程號 :強制退出
kill 新的主進程號或舊的主進程號:如果因為某些原因新的工作進程不能退出,則向其發送kill信號
?
新的主進程退出后,舊的主進程會移除.oldbin后綴,恢復為他的.pid文件,這樣,一切就都恢復為升級之前了。
如果嘗試升級成功,而自己又希望保留新版本時,可發送QUIT信號給舊的主進程,使其退出而只留下新的進程運行:kill -QUIT 舊主進程號