Nginx命令行控制

在Linux中,須要使用命令行來控制Nginx服務器的啓動與中止、重載配置文件、回滾日誌文件、平滑升級等行爲。默認狀況下,Nginx被安裝在目錄usrlocal/nginx/中,其二進制文件路徑爲usrlocal/nginc/sbin/nginx,配置文件路徑爲usrlocal/nginx/conf/nginx.conf。固然,在configure執行時是能夠指定把它們安裝在不一樣目錄的。爲了簡單起見,本節只說明默認安裝狀況下的命令行的使用狀況,若是讀者安裝的目錄發生了變化,那麼替換一下便可。
nginx

(1)默認方式啓動
直接執行Nginx二進制程序。例如:
usrlocal/nginx/sbin/nginx
這時,會讀取默認路徑下的配置文件:usrlocal/nginx/conf/nginx.conf。
實際上,在沒有顯式指定nginx.conf配置文件路徑時,將打開在configure命令執行時使用--conf-path=PATH指定的nginx.conf文件。api

(2)另行指定配置文件的啓動方式
使用-c參數指定配置文件。例如:
usrlocal/nginx/sbin/nginx -c tmpnginx.conf
這時,會讀取-c參數後指定的nginx.conf配置文件來啓動Nginx。服務器

(3)另行指定安裝目錄的啓動方式
使用-p參數指定Nginx的安裝目錄。例如:
usrlocal/nginx/sbin/nginx -p usrlocal/nginx/架構

(4)另行指定全局配置項的啓動方式
能夠經過-g參數臨時指定一些全局配置項,以使新的配置項生效。例如:
usrlocal/nginx/sbin/nginx -g "pid varnginx/test.pid;"
上面這行命令意味着會把pid文件寫到varnginx/test.pid中。
-g參數的約束條件是指定的配置項不能與默認路徑下的nginx.conf中的配置項相沖突,不然沒法啓動。就像上例那樣,相似這樣的配置項:pid logs/nginx.pid,是不能存在於默認的nginx.conf中的。
另外一個約束條件是,以-g方式啓動的Nginx服務執行其餘命令行時,須要把-g參數也帶上,不然可能出現配置項不匹配的情形。例如,若是要中止Nginx服務,那麼須要執行下面代碼:
usrlocal/nginx/sbin/nginx -g "pid varnginx/test.pid;" -s stop
若是不帶上-g"pidvarnginx/test.pid;",那麼找不到pid文件,也會出現沒法中止服務的狀況。測試

(5)測試配置信息是否有錯誤
在不啓動Nginx的狀況下,使用-t參數僅測試配置文件是否有錯誤。例如:
usrlocal/nginx/sbin/nginx -t
執行結果中顯示配置是否正確。ui

(6)在測試配置階段不輸出信息
測試配置選項時,使用-q參數能夠不把error級別如下的信息輸出到屏幕。例如:
usrlocal/nginx/sbin/nginx -t –q操作系統

(7)顯示版本信息
使用-v參數顯示Nginx的版本信息。例如:
usrlocal/nginx/sbin/nginx –v命令行

(8)顯示編譯階段的參數
使用-V參數除了能夠顯示Nginx的版本信息外,還能夠顯示配置編譯階段的信息,如GCC編譯器的版本、操做系統的版本、執行configure時的參數等。例如:
usrlocal/nginx/sbin/nginx –V日誌

(9)快速地中止服務
使用-s stop能夠強制中止Nginx服務。-s參數實際上是告訴Nginx程序向正在運行的Nginx服務發送信號量,Nginx程序經過nginx.pid文件中獲得master進程的進程ID,再向運行中的master進程發送TERM信號來快速地關閉Nginx服務。例如:
usrlocal/nginx/sbin/nginx -s stop
實際上,若是經過kill命令直接向nginx master進程發送TERM或者INT信號,效果是同樣的。例如,先經過ps命令來查看nginx master的進程ID:
:ahf5wapi001:root > ps -ef | grep nginx
root 10800 1 0 02:27 ? 00:00:00 nginx: master process ./nginx
root 10801 10800 0 02:27 ? 00:00:00 nginx: worker process
接下來直接經過kill命令來發送信號:
kill -s SIGTERM 10800
或者:
kill -s SIGINT 10800
上述兩條命令的效果與執行usrlocal/nginx/sbin/nginx-s stop是徹底同樣的。進程

(10)「優雅」地中止服務
若是但願Nginx服務能夠正常地處理完當前全部請求再中止服務,那麼可使用-s quit參數來中止服務。例如:
usrlocal/nginx/sbin/nginx -s quit
該命令與快速中止Nginx服務是有區別的。當快速中止服務時,worker進程與master進程在收到信號後會馬上跳出循環,退出進程。而「優雅」地中止服務時,首先會關閉監聽端口,中止接收新的鏈接,而後把當前正在處理的鏈接所有處理完,最後再退出進程。
與快速中止服務類似,能夠直接發送QUIT信號給master進程來中止服務,其效果與執行-s quit命令是同樣的。例如:
kill -s SIGQUIT <nginx master pid>
若是但願「優雅」地中止某個worker進程,那麼能夠經過向該進程發送WINCH信號來中止服務。例如:
kill -s SIGWINCH <nginx worker pid>

(11)使運行中的Nginx重讀配置項並生效
使用-s reload參數可使運行中的Nginx服務從新加載nginx.conf文件。例如:
usrlocal/nginx/sbin/nginx -s reload
事實上,Nginx會先檢查新的配置項是否有誤,若是所有正確就以「優雅」的方式關閉,再從新啓動Nginx來實現這個目的。相似的,-s是發送信號,仍然能夠用kill命令發送HUP信號來達到相同的效果。
kill -s SIGHUP <nginx master pid>

(12)日誌文件回滾
使用-s reopen參數能夠從新打開日誌文件,這樣能夠先把當前日誌文件更名或轉移到其餘目錄中進行備份,再從新打開時就會生成新的日誌文件。這個功能使得日誌文件不至於過大。例如:
usrlocal/nginx/sbin/nginx -s reopen
固然,這與使用kill命令發送USR1信號效果相同。
kill -s SIGUSR1 <nginx master pid>

(13)平滑升級Nginx
當Nginx服務升級到新的版本時,必需要將舊的二進制文件Nginx替換掉,一般狀況下這是須要重啓服務的,但Nginx支持不重啓服務來完成新版本的平滑升級。
升級時包括如下步驟:
1)通知正在運行的舊版本Nginx準備升級。經過向master進程發送USR2信號可達到目的。例如:
kill -s SIGUSR2 <nginx master pid>
這時,運行中的Nginx會將pid文件重命名,如將usrlocal/nginx/logs/nginx.pid重命名爲usrlocal/nginx/logs/nginx.pid.oldbin,這樣新的Nginx纔有可能啓動成功。
2)啓動新版本的Nginx,可使用以上介紹過的任意一種啓動方法。這時經過ps命令能夠發現新舊版本的Nginx在同時運行。
3)經過kill命令向舊版本的master進程發送SIGQUIT信號,以「優雅」的方式關閉舊版本的Nginx。隨後將只有新版本的Nginx服務運行,此時平滑升級完畢。

(14)顯示命令行幫助
使用-h或者-?參數會顯示支持的全部命令行參數。


參考書籍:《深刻理解Nginx模塊開發與架構解析》

相關文章
相關標籤/搜索