Nginx服務(wù)的啟動(dòng)
flynngod@flynngod:/usr/local/nginx/sbin$ nginx -h
nginx version: nginx/1.13.6
Usage: nginx [-?hvVtTq] [-s signal] [-c filename] [-p prefix] [-g directives]
Options:
-?,-h : this help
-v : show version and exit
-V : show version and configure options then exit
-t : test configuration and exit
-T : test configuration, dump it and exit
-q : suppress non-error messages during configuration testing
-s signal : send signal to a master process: stop, quit, reopen, reload
-p prefix : set prefix path (default: /usr/local/nginx/)
-c filename : set configuration file (default: conf/nginx.conf)
-g directives : set global directives out of configuration file
- “-h”或者“-?”用來打印二進(jìn)制文件的nginx的用法坊秸,也就是當(dāng)前顯示的內(nèi)容谜疤。
- “-v”用來顯示Nginx服務(wù)器的版本號(hào)
- “-V”除了顯示版本號(hào),還顯示Nginx服務(wù)器編譯情況
- “-t”檢查Nginx服務(wù)器配置文件是否有語法錯(cuò)誤帽撑,可以與“-c”聯(lián)用泼各,使輸出內(nèi)容更詳細(xì),這對(duì)查找配置文件中的語法錯(cuò)誤很有幫助亏拉,如果檢查通過扣蜻,將顯示類似下面的信息:
flynngod@flynngod:/usr/local/nginx/sbin$ sudo nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
- “-q”與“-t”聯(lián)用,如果配置文件無錯(cuò)誤及塘,將不輸出上面的內(nèi)容
- “-s signal”用來向Nginx服務(wù)的主進(jìn)程發(fā)送信號(hào)
- “-p prefix”用來改變Nginx的安裝路徑莽使,常用在平滑升級(jí)Nginx服務(wù)器的場(chǎng)合
- “-c filename”用來指定啟動(dòng)Nginx服務(wù)使用的配置文件
- “-g directives”用來補(bǔ)充Nginx配置文件,向Nginx服務(wù)指定啟動(dòng)時(shí)應(yīng)用于全局的配置笙僚。
如果使用默認(rèn)的配置文件芳肌,可以直接運(yùn)行nginx
sudo nginx
可以使用命令查看運(yùn)行狀態(tài)
ps -ef | grep nginx
Nginx服務(wù)的停止
停止Nginx服務(wù)有兩種方法:一種是快速停止,一種是平緩?fù)V估卟恪亿笤?焖偻V故侵噶⒓赐V巩?dāng)前Nginx服務(wù)正在處理的所有網(wǎng)絡(luò)請(qǐng)求,馬上丟棄連接栋猖,停止工作净薛。平緩?fù)V故侵冈试SNginx服務(wù)將當(dāng)前正在處理的網(wǎng)絡(luò)請(qǐng)求處理完成,但不再接收新的請(qǐng)求蒲拉,之后關(guān)閉連接肃拜,停止工作痴腌。
停止Nginx服務(wù)的操作比較多。
- nginx從容停止命令燃领,等所有請(qǐng)求結(jié)束后關(guān)閉服務(wù)衷掷。
ps -ef |grep nginx
kill -QUIT nginx主進(jìn)程號(hào)
- nginx 快速停止命令,立刻關(guān)閉nginx進(jìn)程柿菩。
ps -ef |grep nginx
kill -TERM nginx主進(jìn)程號(hào)
- 如果以上命令不管用戚嗅,可以強(qiáng)制停止。
kill -9 nginx主進(jìn)程號(hào)
- 如果嫌麻煩可以不用查看進(jìn)程號(hào)枢舶,直接使用命令進(jìn)行操作懦胞。
其中/usr/local/var/run/nginx.pid 為nginx.conf中pid命令設(shè)置的參數(shù),用來存放nginx主進(jìn)程號(hào)的文件凉泄。
kill -信號(hào)類型(HUP|TERM|QUIT) cat /usr/local/var/run/nginx.pid
例如
kill -QUIT `cat /usr/local/var/run/nginx.pid`
Nginx服務(wù)的重啟
更改Nginx服務(wù)器的配置和加入新模塊后躏尉,如果希望當(dāng)前Nginx服務(wù)應(yīng)用新的配置或使新模塊生效,就需要重啟Nginx服務(wù)后众。當(dāng)然我們可以先關(guān)閉Nginx服務(wù)胀糜,然后使用新的Nginx配置文件重啟服務(wù)。
Nginx的平滑重啟是這樣一個(gè)過程蒂誉,Nginx服務(wù)進(jìn)程接收到信號(hào)后教藻,首先讀取新的Nginx配置文件,如果配置語法正確右锨,則啟動(dòng)新的Nginx服務(wù)括堤,然后平緩關(guān)閉舊的服務(wù)進(jìn)程。如果新的Nginx配置有問題绍移,將顯示錯(cuò)誤悄窃,仍然使用舊的Nginx進(jìn)程提供服務(wù)。
如果改變了Nginx的配置文件(nginx.conf)蹂窖,想重啟Nginx轧抗,可以發(fā)送系統(tǒng)信號(hào)給Nginx主進(jìn)程的方式來進(jìn)行。不過瞬测,在重啟之前横媚,要確認(rèn)Nginx配置文件的語法是正確的,可通過如下命令測(cè)試配置文件是否正確:
nginx -t -c /usr/local/etc/nginx/nginx.conf
對(duì)于Nginx 0.8.x之后的版本,可以使用命令來重啟nginx:
sudo nginx -s reload
Nginx服務(wù)器的升級(jí)
如果要對(duì)當(dāng)前的Nginx服務(wù)器進(jìn)行版本升級(jí)涣楷,應(yīng)用新模塊分唾,最簡(jiǎn)單的辦法是停止當(dāng)前Nginx服務(wù)抗碰,然后開啟新的Nginx服務(wù)狮斗,但這樣就會(huì)導(dǎo)致在一段時(shí)間內(nèi),用戶無法訪問服務(wù)器弧蝇。為了解決這個(gè)問題碳褒,Nginx服務(wù)器提供平滑升級(jí)的功能折砸。
平滑升級(jí)的過程是這樣的,Nginx服務(wù)接收到USER2信號(hào)后沙峻,首先將舊的nginx.pid文件(如果在配置文件中更改過這個(gè)文件的名字睦授,也是相同的過程)添加后綴.oldbin,變?yōu)閚ginx.pid.oldbin文件摔寨。然后執(zhí)行新版本Nginx服務(wù)器的二進(jìn)制文件啟動(dòng)服務(wù)去枷。如果新的服務(wù)器啟動(dòng)成功,系統(tǒng)中將有新舊兩個(gè)Nginx服務(wù)共同提供Web服務(wù)是复。之后删顶,需要向舊的Nginx服務(wù)進(jìn)程放WINCH信號(hào),使舊的Nginx服務(wù)平滑停止淑廊,并刪除nginx.pid.oldbin文件逗余。在發(fā)送WINCH信號(hào)之前,可以隨時(shí)停止新的Nginx服務(wù)季惩。
為了實(shí)現(xiàn)Nginx服務(wù)器的平滑升級(jí)录粱,新的服務(wù)器安裝路徑應(yīng)該和舊的保持一致。因此建議用戶在安裝新服務(wù)器之前先備份舊服務(wù)器画拾。如果由于某種原因無法保持新舊服務(wù)器安裝路徑一致啥繁,則可以先使用以下命令將舊服務(wù)器的安裝路徑更改為新服務(wù)器的安裝路徑:
nginx -p newInstallPath
其中,newInstallPath為新服務(wù)器的安裝路徑青抛。之后输虱,備份舊服務(wù)器,安裝新服務(wù)器即可脂凶。
當(dāng)需要將正運(yùn)行的Nginx升級(jí)宪睹,可以在不中斷服務(wù)的情況下進(jìn)行,具體步驟如下:
- 使用新的可執(zhí)行程序替換舊的可執(zhí)行程序蚕钦。下載新的Nginx亭病,重新編譯到舊版本的安裝路徑中。重編譯之前嘶居,先備份一下舊的可執(zhí)行文件罪帖。
- 執(zhí)行以下指令,他將存儲(chǔ)有舊版本主進(jìn)程ID的文件重命名為.oldbin:
kill -USR2 舊版本的Nginx主進(jìn)程號(hào)
一般情況下是這樣的:kill -USR2 `cat /usr/local/nginx/nginx.pid`
可以用 ls /usr/local/nginx/logs來查看是否改名
- 執(zhí)行新版本的Nginx可執(zhí)行程序邮屁。
ulimit -SHn 65535
/usr/local/nginx/sbin/nginx
- 此時(shí)新舊版本的Nginx會(huì)同時(shí)運(yùn)行整袁,共同處理請(qǐng)求。要逐步停止舊版本的Nginx佑吝,必須發(fā)送WINCH信號(hào)給舊的主進(jìn)程坐昙。然后,他的工作進(jìn)程將從容關(guān)閉芋忿。
kill -WINCH 舊版本的Nginx主進(jìn)程號(hào)
- 一段時(shí)間后炸客,舊的工作進(jìn)程處理完了所有的請(qǐng)求后退出疾棵,僅由新的進(jìn)程來處理輸入請(qǐng)求了”韵桑可用下面的命令查看:
ps -ef | grep nginx
- 現(xiàn)在可以決定使用新版本還是恢復(fù)到舊版本:
- kill -HUP 舊的主進(jìn)程號(hào) :Nginx在不重載配置文件的情況下啟動(dòng)他的工作進(jìn)程
- kill -QUIT 新的主進(jìn)程號(hào) :從容關(guān)閉其工作進(jìn)程
- kill -TERM 新的主進(jìn)程號(hào) :強(qiáng)制退出
- kill 新的主進(jìn)程號(hào)或舊的主進(jìn)程號(hào):如果因?yàn)槟承┰蛐碌墓ぷ鬟M(jìn)程不能退出是尔,則向其發(fā)送kill信號(hào)
新的主進(jìn)程退出后,舊的主進(jìn)程會(huì)移除.oldbin后綴开仰,恢復(fù)為他的.pid文件拟枚,這樣,一切就都恢復(fù)為升級(jí)之前了众弓。
如果嘗試升級(jí)成功梨州,而自己又希望保留新版本時(shí),可發(fā)送QUIT信號(hào)給舊的主進(jìn)程田轧,使其退出而只留下新的進(jìn)程運(yùn)行:kill -QUIT 舊主進(jìn)程號(hào)暴匠。
這樣就在不停止提供Web服務(wù)的前提下完成了Nginx服務(wù)器的平滑升級(jí)。
參考
http://www.reibang.com/p/84355e6caccb