摘要:接收到信號(hào)的舊的進(jìn)程會(huì)關(guān)閉監(jiān)聽,但是還會(huì)處理當(dāng)前的請(qǐng)求,處理完請(qǐng)求之后,舊的進(jìn)程退出。首先,用新的二進(jìn)制文件替換掉舊的,然后發(fā)送信號(hào)給進(jìn)程。如果一個(gè)升級(jí)已經(jīng)成功,然后你想只保留新的,那么發(fā)送信號(hào)給舊的進(jìn)程讓新的來提供服務(wù)原文翻譯
Nginx進(jìn)程分為master進(jìn)程和worker進(jìn)程,我們可以通過信號(hào)來控制master進(jìn)程。默認(rèn)情況下,Nginx會(huì)把它的master進(jìn)程id寫到/usr/local/nginx/logs/nginx.pid中。你可以在編譯的時(shí)候通過./configure來指定,或者在配置文件中用pid來配置。
Master進(jìn)程能夠接收并處理如下的信號(hào):
ERM, INT(快速退出,當(dāng)前的請(qǐng)求不執(zhí)行完成就退出)
QUIT (優(yōu)雅退出,執(zhí)行完當(dāng)前的請(qǐng)求后退出)
HUP (重新加載配置文件,用新的配置文件啟動(dòng)新worker進(jìn)程,并優(yōu)雅的關(guān)閉舊的worker進(jìn)程)
USR1 (重新打開日志文件)
USR2 (平滑的升級(jí)nginx二進(jìn)制文件)
WINCH (優(yōu)雅的關(guān)閉worker進(jìn)程)
Worker進(jìn)程也可以接收并處理一些信號(hào):
TERM, INT (快速退出)
QUIT (優(yōu)雅退出)
USR1 (重新打開日志文件)
用HUP信號(hào)使Nginx加載新的配置文件當(dāng)Nginx接收到HUP信號(hào)的時(shí)候,它會(huì)嘗試著去解析并應(yīng)用這個(gè)配置文件,如果沒有問題,那么它會(huì)創(chuàng)建新的worker進(jìn)程,并發(fā)送信號(hào)給舊的 worker進(jìn)程,讓其優(yōu)雅的退出。接收到信號(hào)的舊的worker進(jìn)程會(huì)關(guān)閉監(jiān)聽socket,但是還會(huì)處理當(dāng)前的請(qǐng)求,處理完請(qǐng)求之后,舊的 worker進(jìn)程退出。如果Nginx不能夠應(yīng)用新的配置文件,那么仍將用舊的配置文件來提供服務(wù)。
在線升級(jí)Nginx二進(jìn)制文件當(dāng)你想升級(jí)Nginx到一個(gè)新的版本,增加或減少module的時(shí)候,你需要替換Nginx的二進(jìn)制文件,你可以平滑的實(shí)現(xiàn)它,沒有請(qǐng)求會(huì)丟失。
首先,用新的二進(jìn)制文件替換掉舊的,然后發(fā)送USR2信號(hào)給master進(jìn)程。master進(jìn)程會(huì)把自己的.pid文件重命名為.oldbin(例 如,/usr/local/nginx/logs/nginx.pid.oldbin),然后執(zhí)行新的二進(jìn)制文件,從而啟動(dòng)一個(gè)新的master進(jìn)程和新的worker進(jìn)程:
PID PPID USER %CPU VSZ WCHAN COMMAND 33126 1 root 0.0 1164 pause nginx: master process /usr/local/nginx/sbin/nginx 33134 33126 nobody 0.0 1368 kqread nginx: worker process (nginx) 33135 33126 nobody 0.0 1380 kqread nginx: worker process (nginx) 33136 33126 nobody 0.0 1368 kqread nginx: worker process (nginx) 36264 33126 root 0.0 1148 pause nginx: master process /usr/local/nginx/sbin/nginx 36265 36264 nobody 0.0 1364 kqread nginx: worker process (nginx) 36266 36264 nobody 0.0 1364 kqread nginx: worker process (nginx) 36267 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)
在這個(gè)時(shí)候,有兩個(gè)Nginx實(shí)例在運(yùn)行,一起處理進(jìn)來的請(qǐng)求。為了讓舊的實(shí)例退出,你需要發(fā)送WINCH信號(hào)給舊的master進(jìn)程,這樣舊master進(jìn)程的worker進(jìn)程就會(huì)優(yōu)雅的退出:
PID PPID USER %CPU VSZ WCHAN COMMAND 33126 1 root 0.0 1164 pause nginx: master process /usr/local/nginx/sbin/nginx 33135 33126 nobody 0.0 1380 kqread nginx: worker process is shutting down (nginx) 36264 33126 root 0.0 1148 pause nginx: master process /usr/local/nginx/sbin/nginx 36265 36264 nobody 0.0 1364 kqread nginx: worker process (nginx) 36266 36264 nobody 0.0 1364 kqread nginx: worker process (nginx) 36267 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)
一段時(shí)間后,舊的worker進(jìn)程都已經(jīng)退出了,只有新的worker進(jìn)程處理進(jìn)來的請(qǐng)求:
PID PPID USER %CPU VSZ WCHAN COMMAND 33126 1 root 0.0 1164 pause nginx: master process /usr/local/nginx/sbin/nginx 36264 33126 root 0.0 1148 pause nginx: master process /usr/local/nginx/sbin/nginx 36265 36264 nobody 0.0 1364 kqread nginx: worker process (nginx) 36266 36264 nobody 0.0 1364 kqread nginx: worker process (nginx) 36267 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)
這個(gè)時(shí)候你仍然可以通過以下幾個(gè)步驟回滾到舊的服務(wù),因?yàn)榕fmaster進(jìn)程并沒有關(guān)閉其監(jiān)聽的socket: 發(fā)送HUP信號(hào)給舊的master進(jìn)程,它會(huì)啟動(dòng)worker進(jìn)程并且不需要重新加載配置文件 發(fā)送QUIT信號(hào)給新的master進(jìn)程,讓它優(yōu)雅的終止其worker進(jìn)程發(fā)送TERM信號(hào)給新的master進(jìn)程,強(qiáng)制其退出 如果一些原因,新的worker進(jìn)程沒有退出,發(fā)送KILL信號(hào)給它們 當(dāng)新的master進(jìn)程退出之后,舊的master進(jìn)程會(huì)刪除其pid文件名中的后綴.oldbin,這樣一切就又變成升級(jí)之前的樣子。 如果一個(gè)升級(jí)已經(jīng)成功,然后你想只保留新的server,那么發(fā)送QUIT信號(hào)給舊的master進(jìn)程讓新的server來提供服務(wù):
PID PPID USER %CPU VSZ WCHAN COMMAND 36264 1 root 0.0 1148 pause nginx: master process /usr/local/nginx/sbin/nginx 36265 36264 nobody 0.0 1364 kqread nginx: worker process (nginx) 36266 36264 nobody 0.0 1364 kqread nginx: worker process (nginx) 36267 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)
原文 Starting, Stopping, and Restarting Nginx
翻譯 JeremyWei
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/39045.html
摘要:新版本主進(jìn)程退出的同時(shí),舊版本主進(jìn)程將會(huì)自動(dòng)啟動(dòng)它的工作進(jìn)程。下面我們來看一下如何給運(yùn)行中的添加模塊。 原文鏈接:http://xueliang.org/article/detail/20160615172540639 系統(tǒng)基于ubuntu server 14.04.4 amd64 安裝 第一步 下載并解壓Nginx壓縮包 從Nginx官網(wǎng)下載Nginx,或者在Linux上執(zhí)行wget...
摘要:于年發(fā)布,聚焦于高性能,高并發(fā)和低內(nèi)存消耗問題。二服務(wù)的啟停控制在講解配置文件參數(shù)前,讓我們先來了解一下的啟停操作吧。在講解配置項(xiàng)之前,讓我們先了解一下各個(gè)塊的作用。配置最大連接數(shù)設(shè)置允許每個(gè)同時(shí)開啟的最大連接數(shù),默認(rèn)值。 一、nginx簡介、 ??nginx(發(fā)音engine x)是俄羅斯軟件工程師Igor Sysoev開發(fā)的免費(fèi)開源web服務(wù)器軟件。nginx于2004年發(fā)布,聚焦...
摘要:注意如果想完全實(shí)現(xiàn)全站,你的全站鏈接都得是的,否則綠鎖會(huì)不顯示?;蛘卟扇〉绕渌胧?shí)現(xiàn)。 操作目錄在root的home下,/home /mt/server/nginx/sbin/nginx 這是x云默認(rèn)nginx 路徑 下載nginx1.8 stable wget http://nginx.org/download/nginx-1.8.0.tar.gz tar zxvf nginx-1...
摘要:主進(jìn)程首先檢查語法的有效性,然后試圖應(yīng)用新的配置,即打開日志文件和新的監(jiān)聽套接字。舊的工作進(jìn)程關(guān)閉監(jiān)聽的套接字并繼續(xù)服務(wù)舊的客戶端。 [nginx文檔翻譯系列] 控制nginx 原文鏈接:http://nginx.org/en/docs/cont...轉(zhuǎn)自我的GitHub有些地方覺得翻譯的不是很合理,所以在括號(hào)中寫出了原句。如果有地方翻譯的不合理,請(qǐng)多多指教。 修改配置文件(Chan...
閱讀 2914·2023-04-25 21:26
閱讀 1595·2021-11-25 09:43
閱讀 2008·2019-08-30 15:52
閱讀 1000·2019-08-30 14:05
閱讀 2689·2019-08-29 16:10
閱讀 485·2019-08-29 13:48
閱讀 1929·2019-08-29 12:47
閱讀 1351·2019-08-23 18:04