reload背后的步驟
- 向master進(jìn)程發(fā)送HUP信號(hào)(使用reload命令)
- master進(jìn)程校驗(yàn)配置語法是否正確
- master進(jìn)程打開新的監(jiān)聽端口 - -可能新的配置文件引入了新的配置端口
- master進(jìn)程用新配置啟動(dòng)新的worler子進(jìn)程
- master進(jìn)程向老的worker進(jìn)程發(fā)送QUIT信號(hào)
- 老的worker進(jìn)程關(guān)閉監(jiān)聽句柄,等待當(dāng)期鏈接處理完畢后倦蚪,結(jié)束進(jìn)程
熱升級(jí)的步驟 不停機(jī)更新
- 將舊的nginx文件替換成新的nginx文件 趟卸,備份舊文件(binary)
- 向master進(jìn)程發(fā)送USR2信號(hào),關(guān)閉老服務(wù)的worker進(jìn)程
- master進(jìn)程修改pid文件名似舵,加上后綴 .oldbin
- master進(jìn)程用新的nginx文件啟動(dòng)新的master進(jìn)程
---以下確保新的nginx服務(wù)沒問題時(shí),關(guān)閉老的master進(jìn)程- 向老的master發(fā)送QUIT信號(hào)葱峡,關(guān)閉老的master進(jìn)程
---當(dāng)發(fā)送問題時(shí)砚哗,使用這個(gè)步驟,回退至老版本- 回退:向老master發(fā)送HUP信號(hào)砰奕,向新master發(fā)送QUIT信號(hào)
優(yōu)雅的關(guān)閉worker進(jìn)程
針對(duì)的是HTTP蛛芥,https請(qǐng)求,worker進(jìn)程無法判斷TCP军援,或者UDP層仅淑,數(shù)據(jù)的傳輸是否完成,還有websocket報(bào)文是否發(fā)送完畢胸哥,所以對(duì)于TCP,UDP,websocket是無法優(yōu)雅關(guān)閉的涯竟。
- 設(shè)置定時(shí)器, 即設(shè)置 worker_shutdown_timeout = XX
- 關(guān)閉監(jiān)聽句柄
- 關(guān)閉空閑鏈接
- 在循環(huán)中等待鏈接關(guān)閉 --(在定時(shí)器超時(shí)時(shí)空厌,直接關(guān)閉庐船,則只有一半的優(yōu)雅關(guān)閉) 時(shí)間比較長
- 退出進(jìn)程