nginx優(yōu)雅重啟升級(jí)

http://blog.csdn.net/gnail_oug/article/details/52754491

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珠漂。

nginx的安裝參考:CentOS6.5編譯安裝Nginx的方法

1晚缩、啟動(dòng)nginx,直接運(yùn)行nginx的可執(zhí)行文件:

[plain] view plain copy

  1. [root@localhost ~]# /usr/local/nginx/sbin/nginx

2媳危、停止nginx

快速關(guān)閉:nginx -s stop 或者kill -TERM 主進(jìn)程號(hào) 或者kill -INT 主進(jìn)程號(hào)

[plain] view plain copy

  1. [root@localhost sbin]# pwd
  2. /usr/local/nginx/sbin
  3. [root@localhost sbin]# ./nginx -s stop

或者

[plain] view plain copy

  1. [root@localhost sbin]# ps -ef |grep nginx|grep master
  2. root 9879 1 0 13:15 ? 00:00:00 nginx: master process ./nginx
  3. [root@localhost sbin]# kill -TERM 9879

或者

[plain] view plain copy

  1. [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)

[plain] view plain copy

  1. [root@songguoliang sbin]# pwd
  2. /usr/local/nginx/sbin
  3. [root@songguoliang sbin]# ./nginx -s quit

注意:執(zhí)行該命令的用戶應(yīng)該是啟動(dòng)nginx的用戶

[plain] view plain copy

  1. [root@localhost sbin]# ps -ef |grep nginx
  2. root 9889 1 0 13:17 ? 00:00:00 nginx: master process ./nginx
  3. nobody 9890 9889 0 13:17 ? 00:00:00 nginx: worker process
  4. root 9893 2008 0 13:18 pts/1 00:00:00 grep nginx
  5. [root@localhost sbin]# kill -QUIT 9889

3、重新加載配置文件:nginx -s reload 或者 kill -HUP 主進(jìn)程號(hào)

nginx配置平滑更新

為了讓主進(jìn)程重新讀取配置文件待笑,應(yīng)該向主進(jìn)程發(fā)送一個(gè)HUP信號(hào)鸣皂,主進(jìn)程一旦接收到重新加載配置的的信號(hào),它就檢查配置文件語(yǔ)法的有效性滋觉,然后試圖應(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)閉汹碱。

[plain] view plain copy

  1. [root@localhost sbin]# ./nginx -s reload

或者

[plain] view plain copy

  1. [root@localhost sbin]# ps -ef|grep nginx
  2. root 9944 1 0 13:22 ? 00:00:00 nginx: master process ./nginx
  3. nobody 9949 9944 0 13:23 ? 00:00:00 nginx: worker process
  4. root 9960 9917 0 13:28 pts/1 00:00:00 grep nginx
  5. [root@songguoliang sbin]# kill -HUP 9944

4粘衬、測(cè)試配置文件,檢查配置文件語(yǔ)法是否正確咳促,然后試圖打開文件涉及的配置:nginx -t

[plain] view plain copy

  1. [root@localhost sbin]# ./nginx -t
  2. nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
  3. nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

5稚新、查看nginx版本信息: nginx -v

[plain] view plain copy

  1. [root@songguoliang sbin]# ./nginx -v
  2. nginx version: nginx/1.10.1

6、查看nginx版本信息跪腹,編譯版本褂删,和配置參數(shù):nginx -V

[plain] view plain copy

  1. [root@songguoliang sbin]# ./nginx -V
  2. nginx version: nginx/1.10.1
  3. built by gcc 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC)
  4. configure arguments: --prefix=/usr/local/nginx

7、重啟日志文件冲茸,備份日志文件時(shí)常用:nginx -s reopen 或者 kill -USR1 主進(jìn)程號(hào)

[plain] view plain copy

  1. [root@localhost sbin]# ./nginx -s reopen

或者

[plain] view plain copy

  1. [root@localhost sbin]# kill -USR1 2030

由于nginx是通過inode指向日志文件的屯阀,inode和文件名無(wú)關(guān),所以即使把日志文件重命名轴术,nginx還是將日志文件寫入原文件难衰,只有用上面的命令重新開啟日志文件才能將日志寫入新的日志文件。

8膳音、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)

[plain] view plain copy

  1. [root@localhost sbin]# kill -USR2 9944

執(zhí)行命令前的進(jìn)程:

[plain] view plain copy

  1. [root@localhost sbin]# ps -ef |grep nginx
  2. root 9944 1 0 13:22 ? 00:00:00 nginx: master process ./nginx
  3. nobody 9965 9944 0 13:29 ? 00:00:00 nginx: worker process
  4. root 10010 9917 0 13:42 pts/1 00:00:00 grep nginx

執(zhí)行命令后的進(jìn)程:

[plain] view plain copy

  1. [root@localhost sbin]# ps -ef |grep nginx
  2. root 9944 1 0 13:22 ? 00:00:00 nginx: master process ./nginx
  3. nobody 9965 9944 0 13:29 ? 00:00:00 nginx: worker process
  4. root 10012 9944 0 13:43 ? 00:00:00 nginx: master process ./nginx
  5. nobody 10013 10012 0 13:43 ? 00:00:00 nginx: worker process
  6. 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)

[plain] view plain copy

  1. [root@songguoliang logs]# pwd
  2. /usr/local/nginx/logs
  3. [root@songguoliang logs]# ll
  4. 總用量 16
  5. -rw-r--r--. 1 nobody root 596 10月 8 13:02 access.log
  6. -rw-r--r--. 1 nobody root 881 10月 8 13:43 error.log
  7. -rw-r--r--. 1 root root 6 10月 8 13:43 nginx.pid
  8. -rw-r--r--. 1 root root 5 10月 8 13:22 nginx.pid.oldbin
  9. [root@songguoliang logs]# cat nginx.pid
  10. 10012
  11. [root@songguoliang logs]# cat nginx.pid.oldbin
  12. 9944

這時(shí),nginx的新的實(shí)例和舊的實(shí)例同時(shí)工作霉涨,共同處理請(qǐng)求連接按价。接下來(lái)要關(guān)閉舊的實(shí)例進(jìn)程。

(3)給舊的主進(jìn)程發(fā)送WINCH信號(hào)笙瑟,kill -WINCH 舊的主進(jìn)程號(hào)

[plain] view plain copy

  1. [root@localhost sbin]# ps -ef |grep nginx
  2. root 9944 1 0 13:22 ? 00:00:00 nginx: master process ./nginx
  3. nobody 9965 9944 0 13:29 ? 00:00:00 nginx: worker process
  4. root 10012 9944 0 13:43 ? 00:00:00 nginx: master process ./nginx
  5. nobody 10013 10012 0 13:43 ? 00:00:00 nginx: worker process
  6. root 10092 9917 0 14:05 pts/1 00:00:00 grep nginx
  7. [root@localhost sbin]# kill -WINCH 9944
  8. [root@localhost sbin]#
  9. [root@localhost sbin]#
  10. [root@localhost sbin]#
  11. [root@localhost sbin]# ps -ef |grep nginx
  12. root 9944 1 0 13:22 ? 00:00:00 nginx: master process ./nginx
  13. root 10012 9944 0 13:43 ? 00:00:00 nginx: master process ./nginx
  14. nobody 10013 10012 0 13:43 ? 00:00:00 nginx: worker process
  15. 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還未停止秉宿。

(4)給舊的主進(jìn)程發(fā)送QUIT信號(hào)戒突,使其關(guān)閉。

[plain] view plain copy

  1. [root@localhost sbin]# kill -QUIT 9944
  2. [root@localhost sbin]# ps -ef |grep nginx
  3. root 10012 1 0 13:43 ? 00:00:00 nginx: master process ./nginx
  4. nobody 10013 10012 0 13:43 ? 00:00:00 nginx: worker process
  5. 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í)完成忱叭。

中途停止升級(jí)膝舅,回滾到舊的nginx

在步驟(3)時(shí),如果想回到舊的nginx不再升級(jí)

(1)給舊的主進(jìn)程號(hào)發(fā)送HUP命令窑多,此時(shí)nginx不重新讀取配置文件的情況下重新啟動(dòng)舊主進(jìn)程的工作進(jìn)程仍稀。

[plain] view plain copy

  1. [root@localhost sbin]# kill -HUP 9944

(2)優(yōu)雅的關(guān)閉新的主進(jìn)程

[plain] view plain copy

  1. [root@localhost sbin]# kill -QUIT 10012

注:如果由于某種原因,無(wú)法關(guān)閉新主進(jìn)程的工作進(jìn)程埂息,直接給進(jìn)程號(hào)發(fā)送KILL信號(hào)

nginx的進(jìn)程分為主進(jìn)程和工作進(jìn)程技潘,關(guān)于nginx的信號(hào),主進(jìn)程支持以下信號(hào):

TERM千康,INT 快速關(guān)閉

QUIT 優(yōu)雅的關(guān)閉

KILL 關(guān)閉一個(gè)頑固進(jìn)程

HUP 改變配置享幽,使用新配置開啟新的工作進(jìn)程,優(yōu)雅的關(guān)閉舊的進(jìn)程

USR1 重新開啟日志文件

USR2 平滑升級(jí)nginx

WINCH 優(yōu)雅的關(guān)閉工作進(jìn)程

單個(gè)工作進(jìn)程也可以通過信號(hào)控制拾弃,但它不是必須的值桩。單個(gè)工作進(jìn)程支持的信號(hào)有:

TERM,INT 快速關(guān)閉

QUIT 優(yōu)雅的關(guān)閉

USR1 重新開啟日志文件

WINCH 異常終止調(diào)試(需要啟動(dòng)debug_points)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末豪椿,一起剝皮案震驚了整個(gè)濱河市奔坟,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌搭盾,老刑警劉巖咳秉,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異鸯隅,居然都是意外死亡澜建,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門蝌以,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)炕舵,“玉大人,你說我怎么就攤上這事跟畅⊙式睿” “怎么了?”我有些...
    開封第一講書人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵碍彭,是天一觀的道長(zhǎng)晤硕。 經(jīng)常有香客問我悼潭,道長(zhǎng),這世上最難降的妖魔是什么舞箍? 我笑而不...
    開封第一講書人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任舰褪,我火速辦了婚禮,結(jié)果婚禮上疏橄,老公的妹妹穿的比我還像新娘占拍。我一直安慰自己,他們只是感情好捎迫,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開白布晃酒。 她就那樣靜靜地躺著,像睡著了一般窄绒。 火紅的嫁衣襯著肌膚如雪贝次。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,079評(píng)論 1 285
  • 那天彰导,我揣著相機(jī)與錄音蛔翅,去河邊找鬼。 笑死位谋,一個(gè)胖子當(dāng)著我的面吹牛山析,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播掏父,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼笋轨,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了赊淑?” 一聲冷哼從身側(cè)響起爵政,我...
    開封第一講書人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎膏燃,沒想到半個(gè)月后茂卦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡组哩,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了处渣。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片伶贰。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖罐栈,靈堂內(nèi)的尸體忽然破棺而出黍衙,到底是詐尸還是另有隱情,我是刑警寧澤荠诬,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布琅翻,位于F島的核電站位仁,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏方椎。R本人自食惡果不足惜聂抢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望棠众。 院中可真熱鬧琳疏,春花似錦、人聲如沸闸拿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)新荤。三九已至揽趾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間苛骨,已是汗流浹背篱瞎。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留智袭,地道東北人奔缠。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像吼野,于是被迫代替她去往敵國(guó)和親校哎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 1. Nginx的模塊與工作原理 Nginx由內(nèi)核和模塊組成瞳步,其中闷哆,內(nèi)核的設(shè)計(jì)非常微小和簡(jiǎn)潔,完成的工作也非常簡(jiǎn)單...
    rosekissyou閱讀 10,196評(píng)論 5 124
  • Page 1:nginx 服務(wù)器安裝及配置文件詳解 CentOS 6.2 x86_64 安裝 nginx 1.1 ...
    xiaojianxu閱讀 8,527評(píng)論 1 41
  • 跑步首先是一個(gè)長(zhǎng)期周期性的運(yùn)動(dòng)单起,可以鍛煉心肺抱怔,磨練意志,要求不高嘀倒,但是難在堅(jiān)持屈留。 [裝備]如果只是沒事活...
    十二月的陽(yáng)光閱讀 274評(píng)論 0 3
  • 回顧2016年灌危,在這逝去的365天里,我做了些什么呢碳胳? 我有哪些付出勇蝙?哪些努力?哪些成就挨约?哪些得到味混?可有懊悔产雹?可有...
    映日紅閱讀 256評(píng)論 1 3
  • 上了大學(xué)之后蔓挖,每次回家,親戚朋友們就開始輪番轟炸的問盗誊,有沒有男朋友呀时甚,什么時(shí)候帶回來(lái)看看呀…… 而我爸聽到的時(shí)候,...
    婭迎閱讀 596評(píng)論 2 3