Nginx啟動(dòng)、重啟、重新加載配置文件和平滑升級(jí)
大家好,我是洲洲,歡迎關(guān)注,一個(gè)愛聽周杰倫的程序員。關(guān)注公眾號(hào)【程序員洲洲】即可獲得10G學(xué)習(xí)資料、面試筆記、大廠獨(dú)家學(xué)習(xí)體系路線等…還可以加入技術(shù)交流群 歡迎大家在CSDN后臺(tái)私信我!
前言
首先我們介紹一下Nginx是什么,怕有些同學(xué)忘了Nginx的定義了!
Nginx有一個(gè)主進(jìn)程和幾個(gè)工作進(jìn)程,主進(jìn)程的主要作用就是讀取、評(píng)估配置文件和管理工作進(jìn)程,工作進(jìn)程對(duì)請(qǐng)求做實(shí)際處理。工作進(jìn)程的數(shù)量是在配置文件中配置的,一般設(shè)置為cpu的核心數(shù)線程數(shù)。
Nginx可以通過信號(hào)控制,默認(rèn)情況下,主進(jìn)程的進(jìn)程ID記錄在/usr/local/nginx/logs/nginx.pid 文件中。信號(hào)可以通過nginx可執(zhí)行文件發(fā)送給nginx (nginx -s 信號(hào)),也可以通過unix的kill命令發(fā)送給nginx,這種情況下是將信號(hào)直接發(fā)送給指定進(jìn)程ID的進(jìn)程,如:kill QUIT 1628。
一、啟動(dòng)
啟動(dòng)nginx,直接運(yùn)行nginx的可執(zhí)行文件:
[root@localhost ~]# /usr/local/nginx/sbin/nginx
二、停止Nginx
快速關(guān)閉:nginx -s stop 或者kill -TERM 主進(jìn)程號(hào) 或者kill -INT 主進(jìn)程號(hào)
[root@localhost sbin]# pwd
/usr/local/nginx/sbin
[root@localhost sbin]# ./nginx -s stop
//方案2
[root@localhost sbin]# ps -ef |grep nginx|grep master
root 9879 1 0 13:15 ? 00:00:00 nginx: master process ./nginx
[root@localhost sbin]# kill -TERM 9879
//方案3
[root@localhost sbin]# kill -INT 9879
優(yōu)雅關(guān)閉(不接受新的連接請(qǐng)求,等待舊的連接請(qǐng)求處理完畢再關(guān)閉):nginx -s quit 或者 kill -QUIT 主進(jìn)程號(hào)
[root@songguoliang sbin]# pwd
/usr/local/nginx/sbin
[root@songguoliang sbin]# ./nginx -s quit
注意:執(zhí)行該命令的用戶應(yīng)該是啟動(dòng)nginx的用戶
[root@localhost sbin]# ps -ef |grep nginx
root 9889 1 0 13:17 ? 00:00:00 nginx: master process ./nginx
nobody 9890 9889 0 13:17 ? 00:00:00 nginx: worker process
root 9893 2008 0 13:18 pts/1 00:00:00 grep nginx
[root@localhost sbin]# kill -QUIT 9889
三、重新加載配置文件
nginx -s reload 或者 kill -HUP 主進(jìn)程號(hào)
為了讓主進(jìn)程重新讀取配置文件,應(yīng)該向主進(jìn)程發(fā)送一個(gè)HUP信號(hào),主進(jìn)程一旦接收到重新加載配置的的信號(hào),它就檢查配置文件語法的有效性,然后試圖應(yīng)用新的配置,即打開新的日志文件和新的socket 監(jiān)聽,如果失敗,它將回滾配置更改并繼續(xù)使用舊的配置,如果成功了,它開啟新的工作進(jìn)程,并給舊的工作進(jìn)程發(fā)消息讓它們優(yōu)雅的關(guān)閉,舊的工作進(jìn)程接收到關(guān)閉信號(hào)后,不再接收新的請(qǐng)求,如果已有請(qǐng)求正在處理,等當(dāng)前請(qǐng)求處理完畢后關(guān)閉,如果沒有請(qǐng)求正在處理,則直接關(guān)閉。
[root@localhost sbin]# ./nginx -s reload
方案2:
[root@localhost sbin]# ps -ef|grep nginx
root 9944 1 0 13:22 ? 00:00:00 nginx: master process ./nginx
nobody 9949 9944 0 13:23 ? 00:00:00 nginx: worker process
root 9960 9917 0 13:28 pts/1 00:00:00 grep nginx
[root@songguoliang sbin]# kill -HUP 9944
四、測(cè)試配置文件
檢查配置文件語法是否正確,然后試圖打開文件涉及的配置:nginx -t
[root@localhost sbin]# ./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
五、查看nginx版本信息
[root@zhouzhou sbin]# ./nginx -v
nginx version: nginx/1.10.1
六、查看nginx版本信息,編譯版本,和配置參數(shù)
[root@songguoliang sbin]# ./nginx -V
nginx version: nginx/1.10.1
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC)
configure arguments: --prefix=/usr/local/nginx
七、重啟日志文件
重啟日志文件,備份日志文件時(shí)常用:nginx -s reopen 或者 kill -USR1 主進(jìn)程號(hào)
[root@localhost sbin]# ./nginx -s reopen
[root@localhost sbin]# kill -USR1 2030
由于nginx是通過inode指向日志文件的,inode和文件名無關(guān),所以即使把日志文件重命名,nginx還是將日志文件寫入原文件,只有用上面的命令重新開啟日志文件才能將日志寫入新的日志文件。
八、nginx平滑升級(jí)
如果你需要升級(jí)或者添加、刪除服務(wù)器模塊時(shí),可以通過nginx的平滑升級(jí),在不停止服務(wù)的情況下升級(jí)nginx。
(1)用新的nginx可執(zhí)行程序替換舊的可執(zhí)行程序,即下載新的nginx,重新編譯到舊版本的安裝路徑中(重新編譯之前可以備份舊的可執(zhí)行文件)
(2)給nginx主進(jìn)程號(hào)發(fā)送USR2信號(hào)
[root@localhost sbin]# kill -USR2 9944
執(zhí)行命令前的進(jìn)程:
[root@localhost sbin]# ps -ef |grep nginx
root 9944 1 0 13:22 ? 00:00:00 nginx: master process ./nginx
nobody 9965 9944 0 13:29 ? 00:00:00 nginx: worker process
root 10010 9917 0 13:42 pts/1 00:00:00 grep nginx
執(zhí)行命令后的進(jìn)程:
[root@localhost sbin]# ps -ef |grep nginx
root 9944 1 0 13:22 ? 00:00:00 nginx: master process ./nginx
nobody 9965 9944 0 13:29 ? 00:00:00 nginx: worker process
root 10012 9944 0 13:43 ? 00:00:00 nginx: master process ./nginx
nobody 10013 10012 0 13:43 ? 00:00:00 nginx: worker process
root 10015 9917 0 13:43 pts/1 00:00:00 grep nginx
給nginx發(fā)送USR2信號(hào)后,nginx會(huì)將logs/nginx.pid文件重命名為nginx.pid.oldbin,然后用新的可執(zhí)行文件啟動(dòng)一個(gè)新的nginx主進(jìn)程和對(duì)應(yīng)的工作進(jìn)程,并新建一個(gè)新的nginx.pid保存新的主進(jìn)程號(hào)
[root@songguoliang logs]# pwd
/usr/local/nginx/logs
[root@songguoliang logs]# ll
總用量 16
-rw-r--r--. 1 nobody root 596 10月 8 13:02 access.log
-rw-r--r--. 1 nobody root 881 10月 8 13:43 error.log
-rw-r--r--. 1 root root 6 10月 8 13:43 nginx.pid
-rw-r--r--. 1 root root 5 10月 8 13:22 nginx.pid.oldbin
[root@songguoliang logs]# cat nginx.pid
10012
[root@songguoliang logs]# cat nginx.pid.oldbin
9944
這時(shí),nginx的新的實(shí)例和舊的實(shí)例同時(shí)工作,共同處理請(qǐng)求連接。接下來要關(guān)閉舊的實(shí)例進(jìn)程。
先給舊的主進(jìn)程發(fā)送WINCH信號(hào),kill -WINCH 舊的主進(jìn)程號(hào)
[root@localhost sbin]# ps -ef |grep nginx
root 9944 1 0 13:22 ? 00:00:00 nginx: master process ./nginx
nobody 9965 9944 0 13:29 ? 00:00:00 nginx: worker process
root 10012 9944 0 13:43 ? 00:00:00 nginx: master process ./nginx
nobody 10013 10012 0 13:43 ? 00:00:00 nginx: worker process
root 10092 9917 0 14:05 pts/1 00:00:00 grep nginx
[root@localhost sbin]# kill -WINCH 9944
[root@localhost sbin]#
[root@localhost sbin]#
[root@localhost sbin]#
[root@localhost sbin]# ps -ef |grep nginx
root 9944 1 0 13:22 ? 00:00:00 nginx: master process ./nginx
root 10012 9944 0 13:43 ? 00:00:00 nginx: master process ./nginx
nobody 10013 10012 0 13:43 ? 00:00:00 nginx: worker process
root 10094 9917 0 14:06 pts/1 00:00:00 grep nginx
舊的主進(jìn)程號(hào)收到WINCH信號(hào)后,將舊進(jìn)程號(hào)管理的舊的工作進(jìn)程優(yōu)雅的關(guān)閉。即一段時(shí)間后舊的工作進(jìn)程全部關(guān)閉,只有新的工作進(jìn)程在處理請(qǐng)求連接。這時(shí),依然可以恢復(fù)到舊的進(jìn)程服務(wù),因?yàn)榕f的進(jìn)程的監(jiān)聽socket還未停止。
給舊的主進(jìn)程發(fā)送QUIT信號(hào),使其關(guān)閉。
[root@localhost sbin]# kill -QUIT 9944
[root@localhost sbin]# ps -ef |grep nginx
root 10012 1 0 13:43 ? 00:00:00 nginx: master process ./nginx
nobody 10013 10012 0 13:43 ? 00:00:00 nginx: worker process
root 10118 9917 0 14:16 pts/1 00:00:00 grep nginx
給舊的主進(jìn)程發(fā)送QUIT信號(hào)后,舊的主進(jìn)程退出,并移除logs/nginx.pid.oldbin文件,nginx的升級(jí)完成。
總結(jié)
Hello,各位看官老爺們好,洲洲已經(jīng)建立了CSDN技術(shù)交流群,如果你很感興趣,可以私信我加入我的社群。
??社群中不定時(shí)會(huì)有很多活動(dòng),例如每周都會(huì)包郵免費(fèi)送一些技術(shù)書籍及精美禮品、學(xué)習(xí)資料分享、大廠面經(jīng)分享、技術(shù)討論、行業(yè)大佬創(chuàng)業(yè)雜談等等。
??社群方向很多,相關(guān)領(lǐng)域有Web全棧(前后端)、人工智能、機(jī)器學(xué)習(xí)、自媒體變現(xiàn)、前沿科技文章分享、論文精讀等等。
??不管你是多新手的小白,都?xì)g迎你加入社群中討論、聊天、分享,加速助力你成為下一個(gè)技術(shù)大佬!也隨時(shí)歡迎您跟我溝通,一起交流,一起成長(zhǎng)。變現(xiàn)、進(jìn)步、技術(shù)、資料、項(xiàng)目、你想要的這里都會(huì)有
??網(wǎng)絡(luò)的風(fēng)口只會(huì)越來越大,風(fēng)浪越大,魚越貴!歡迎您加入社群~一個(gè)人可以或許可以走的很快,但一群人將走的更遠(yuǎn)!
??關(guān)注我的公眾號(hào)(與CSDN同ID:程序員洲洲)可以獲得一份Java 10萬字面試寶典及相關(guān)資料!~
??想都是問題,做都是答案!行動(dòng)起來吧!歡迎評(píng)論區(qū)or后臺(tái)與我溝通交流,也歡迎您點(diǎn)擊下方的鏈接直接加入到我的交流社群!~ 跳轉(zhuǎn)鏈接社區(qū)~文章來源:http://www.zghlxwxcb.cn/news/detail-532958.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-532958.html
到了這里,關(guān)于Nginx啟動(dòng)、重啟、重新加載配置文件和平滑升級(jí)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!