天天看點

Nginx:04---Nginx的指令行控制

  • 在預設的情況下:
  • Nginx安裝在/usr/local/nginx/下
  • 可執行的Nginx檔案為/usr/local/nginx//sbin/nginx
  • 預設的配置檔案為/usr/local/nginx/conf/nginx.conf

一、Nginx啟動的幾種方式

①預設啟動方式

  • 執行執行Nginx二進制程式。例如:
sudo /usr/local/nginx/sbin/nginx      
Nginx:04---Nginx的指令行控制
  • 預設的啟動方式會讀取預設路徑下的配置檔案:/usr/local/nginx/conf/nginx.conf

②以其他配置檔案的啟動方式(-c)

  • 使用-c參數指定配置檔案
  • 例如,下面以~/目錄下的tmpnginx.conf配置檔案啟動nginx
sudo /usr/local/nginx/sbin/nginx -c ~/tmpnginx.conf      

③另行執行安裝目錄的啟動方式(-p)

  • 使用-p參數指定Nginx的安裝目錄。例如:
sudo /usr/local/nginx/sbin/nginx -p /usr/local/nginx      

④另行指定全局配置項的啟動方式(-g)

  • 可以通過-g參數臨時指定一些全局配置項,以使新的配置項生效
  • 例如,上面這行指令意味着會把pid檔案寫到/var/nginx/test.pid中
sudo /usr/local/nginx/sbin/nginx -g "pid /var/nginx/test.pid;"      
  • 使用該參數有兩個限制條件:
  • ①指定的配置項不能與預設路徑下的nginx.conf中的配置項相沖突,否 則無法啟動。就像上例那樣,類似這樣的配置項:pid logs/nginx.pid,是不能存在于預設的 nginx.conf中的
  • ② 以-g方式啟動的Nginx服務執行其他指令行時,需要把-g參數也帶上,否則可能出現配置項不比對的情形。例如,如果要停止Nginx服務,那麼需要執行下面代碼,如果不帶上-g "pid /var/nginx/test.pid;",那麼找不到pid檔案,也會出現無法停止服務的情 況
sudo /usr/local/nginx/sbin/nginx -g "pid /var/nginx/test.pid;" -s stop      

二、Nginx關閉的幾種方式

①快速地停止服務(-s stop)

  • 使用-s stop可以強制停止Nginx服務。-s參數其實是告訴Nginx程式向正在運作的Nginx服 務發送信号量,Nginx程式通過nginx.pid檔案中得到master程序的程序ID,再向運作中的 master程序發送TERM信号來快速地關閉Nginx服務
  • 例如:
sudo /usr/local/nginx/sbin/nginx -s stop      
  • 實際上,如果通過kill指令直接向nginx master程序發送TERM或者INT信号,效果是一樣的。例如,先通過ps指令來檢視nginx master的程序ID,然後通過kill指令關閉
Nginx:04---Nginx的指令行控制
sudo kill -s SIGTERM 20512

#或者使用下面的指令
sudo kill -s SIGINT 20512      

②“優雅”地停止服務(-s quit)

  • 如果希望Nginx服務可以正常地處理完目前所有請求再停止服務,那麼可以使用-s quit參數來停止服務。該指令與快速停止Nginx服務是有差別的。當快速停止服務時,worker程序與master程序 在收到信号後會立刻跳出循環,退出程序。而“優雅”地停止服務時,首先會關閉監聽端口, 停止接收新的連接配接,然後把目前正在處理的連接配接全部處理完,最後再退出程序。
  • 例如:
sudo /usr/local/nginx/sbin/nginx -s quit      
Nginx:04---Nginx的指令行控制
  •  與快速停止服務相似,可以直接發送QUIT信号給master程序來停止服務。其效果與執 行-s quit指令是一樣的。例如:
sudo kill SIGQUIT <nginx master pid>      

三、關閉某個worker程序

  • 如果希望“優雅”地停止某個worker程序,與上面一樣,那麼可以通過向該程序發送WINCH信号來停止 服務
  • 例如:
sudo kill -s SIGWINCH <nginx worker pid>      

四、檢視資訊相關的指令

①測試配置資訊是否有錯誤(-t)

  • 在不啟動Nginx的情況下,使用-t參數僅測試配置檔案是否有錯誤。執行結果中顯示配置是否正确
  • 例如:
sudo /usr/local/nginx/sbin/nginx -t      
Nginx:04---Nginx的指令行控制

②在測試配置階段不輸出資訊(-q)

  • 測試配置選項時,使用-q參數可以不把error級别以下的資訊輸出到螢幕
  • 例如:
sudo /usr/local/nginx/sbin/nginx -t -q      
Nginx:04---Nginx的指令行控制

③顯示版本資訊(-v)

  • 使用-v參數顯示Nginx的版本資訊
  • 例如:
sudo /usr/local/nginx/sbin/nginx -v      
Nginx:04---Nginx的指令行控制

④顯示編譯階段的參數(-V)

  • 使用-V參數除了可以顯示Nginx的版本資訊外,還可以顯示配置編譯階段的資訊,如GCC編譯器的版本、作業系統的版本、執行configure時的參數等
  • 例如:
sudo /usr/local/nginx/sbin/nginx -V      
Nginx:04---Nginx的指令行控制

四、使運作中的Nginx重讀配置項并生效

  • 使用-s reload參數可以使運作中的Nginx服務重新加載nginx.conf檔案

示範案例

  • 先啟動Nginx
Nginx:04---Nginx的指令行控制
  • 然後使Nginx服務重新加載nginx.conf檔案
sudo /usr/local/nginx/sbin/nginx -s reload      
Nginx:04---Nginx的指令行控制
  • 事實上,Nginx會先檢查新的配置項是否有誤,如果全部正确就以“優雅”的方式關閉, 再重新啟動Nginx來實作這個目的
  • 類似的,-s是發送信号,可以用kill指令發送HUP信号來達到相同的效果。例如:
sudo kill SIGHUP <nginx master pid>      

五、日志檔案復原

  • 使用-s reopen參數可以重新打開日志檔案,這樣可以先把目前日志檔案改名或轉移到其他目錄中進行備份,再重新打開時就會生成新的日志檔案。這個功能使得日志檔案不至于過大
  • 例如:
sudo /usr/local/nginx/sbin/nginx -s reopen      
  • 當然,使用kill指令發送USR1信号效果相同
sudo kill SIGUSR1 <nginx master pid>      

六、平滑更新Nginx

  • 當Nginx服務更新到新的版本時,必須要将舊的二進制檔案Nginx替換掉,通常情況下這是需要重新開機服務的,但Nginx支援不重新開機服務來完成新版本的平滑更新
  • 更新時包括以下步驟:
  • ①通知正在運作的舊版本Nginx準備更新。通過向master程序發送USR2信号可達到目的。例如:kill -s SIGUSR2 <nginx master pid>
  • ②這時,運作中的Nginx會将pid檔案重命名,如将usrlocal/nginx/logs/nginx.pid重命名 為usrlocal/nginx/logs/nginx.pid.oldbin,這樣新的Nginx才有可能啟動成功
  • ③啟動新版本的Nginx,可以使用以上介紹過的任意一種啟動方法。這時通過ps指令可以發現新舊版本的Nginx在同時運作
  • ④通過kill指令向舊版本的master程序發送SIGQUIT信号,以“優雅”的方式關閉舊版本的 Nginx。随後将隻有新版本的Nginx服務運作,此時平滑更新完畢

七、檢視指令行幫助

  • 使用-h或者-?參數會顯示支援的所有指令行參數
sudo /usr/local/nginx/sbin/nginx -h      

繼續閱讀