1. 程式人生 > >nginx教程第二篇:nginx命令列控制

nginx教程第二篇:nginx命令列控制

在Linux中, 需要使用命令列來控制Nginx伺服器的啟動與停止、 過載配置檔案、 回滾日 志文件、 平滑升級等行為。 預設情況下, Nginx被安裝在目錄/usr/local/nginx/中, 其二進位制文 件路徑為/usr/local/nginc/sbin/nginx, 配置檔案路徑為/usr/local/nginx/conf/nginx.conf。 當然, 在 configure執行時是可以指定把它們安裝在不同目錄的。

1.預設啟動方式

直接執行Nginx二進位制程式。 例如:

/usr/local/nginx/sbin/nginx

這時, 會讀取預設路徑下的配置檔案: /usr/local/nginx/conf/nginx.conf

2.指定配置檔案啟動方式

使用-c引數指定配置檔案。 例如:

/usr/local/nginx/sbin/nginx -c tmpnginx.conf

這時, 會讀取-c引數後指定的nginx.conf配置檔案來啟動Nginx

3.另行指定安裝目錄的啟動方式

使用-p引數指定Nginx的安裝目錄。 例如:

/usr/local/nginx/sbin/nginx -p /usr/local/nginx/
4.另行指定全域性配置項的啟動方式

可以通過-g引數臨時指定一些全域性配置項, 以使新的配置項生效。 例如:

/usr/local/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服務, 那麼需要執行下面 程式碼:

/usr/local/nginx/sbin/nginx -g "pid varnginx/test.pid;" -s stop

如果不帶上-g"pidvarnginx/test.pid;", 那麼找不到pid檔案, 也會出現無法停止服務的情 況。

5.測試配置資訊是否有錯誤

在不啟動Nginx的情況下, 使用-t引數僅測試配置檔案是否有錯誤。 例如:

/usr/local/nginx/sbin/nginx -t

執行結果中顯示配置是否正確。

6.在測試配置階段不輸出資訊

測試配置選項時, 使用-q引數可以不把error級別以下的資訊輸出到螢幕。 例如:

/usr/local/nginx/sbin/nginx -t -q
7.顯示版本資訊

使用-v引數顯示Nginx的版本資訊。 例如:

/usr/local/nginx/sbin/nginx -v
8.顯示編譯階段的引數

使用-V引數除了可以顯示Nginx的版本資訊外,還可以顯示配置編譯階段的資訊, 如GCC編譯器的版本、 作業系統的版本、 執行configure時的引數等。 例如:

/usr/local/nginx/sbin/nginx -V
10.快速地停止服務

使用-s stop可以強制停止Nginx服務。 -s引數其實是告訴Nginx程式向正在執行的Nginx服 務傳送訊號量, Nginx程式通過nginx.pid檔案中得到master程序的程序ID, 再向執行中的 master程序傳送TERM訊號來快速地關閉Nginx服務。 例如:

/usr/local/nginx/sbin/nginx -s stop

實際上, 如果通過kill命令直接向nginx master程序傳送TERM或者INT訊號, 效果是一樣 的。 例如: 先通過ps命令來檢視nginx master的程序ID:

computer: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是完全一樣的

11.“優雅”地停止服務

如果希望Nginx服務可以正常地處理完當前所有請求再停止服務, 那麼可以使用-s quit引數來停止服務。 例如:

/usr/local/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>
12.使執行中的Nginx重讀配置項並生效

使用-s reload引數可以使執行中的Nginx服務重新載入nginx.conf檔案。 例如:

/usr/local/nginx/sbin/nginx -s reload

事實上, Nginx會先檢查新的配置項是否有誤,如果全部正確就以“優雅”的方式關閉,再重新啟動Nginx來實現這個目的。 類似的, -s是傳送訊號, 仍然可以用kill命令傳送HUP訊號來達到相同的效果。

kill -s SIGHUP <nginx master pid>
13.日誌檔案回滾

使用-s reopen引數可以重新開啟日誌檔案,這樣可以先把當前日誌檔案改名或轉移到其他目錄中進行備份, 再重新開啟時就會生成新的日誌檔案。 這個功能使得日誌檔案不至於過大。 例如:

/usr/local/nginx/sbin/nginx -s reopen

當然, 這與使用kill命令傳送USR1訊號效果相同。

kill -s SIGUSR1 <nginx master pid>
14.平滑升級Nginx

當Nginx服務升級到新的版本時, 必須要將舊的二進位制檔案Nginx替換掉, 通常情況下這是需要重啟服務的,但Nginx支援不重啟服務來完成新版本的平滑升級。 升級時包括以下步驟:

  • 通知正在執行的舊版本Nginx準備升級。通過向master程序傳送USR2訊號可達到目的。 例如:
kill -s SIGUSR2 <nginx master pid>

這時, 執行中的Nginx會將pid檔案重新命名,如將/usr/local/nginx/logs/nginx.pid重新命名為/usr/local/nginx/logs/nginx.pid.oldbin,這樣新的Nginx才有可能啟動成功。

  • 啟動新版本的Nginx, 可以使用以上介紹過的任意一種啟動方法。 這時通過ps命令可以發現新舊版本的Nginx在同時執行。
  • 通過kill命令向舊版本的master程序傳送SIGQUIT訊號, 以“優雅”的方式關閉舊版本的Nginx。 隨後將只有新版本的Nginx服務執行, 此時平滑升級完畢。
15.顯示命令列幫助

使用-h或者-?引數會顯示支援的所有命令列引數