摘要:主進程首先檢查語法的有效性,然后試圖應用新的配置,即打開日志文件和新的監(jiān)聽套接字。舊的工作進程關閉監(jiān)聽的套接字并繼續(xù)服務舊的客戶端。
[nginx文檔翻譯系列] 控制nginx
原文鏈接:http://nginx.org/en/docs/cont...
轉自我的GitHub
有些地方覺得翻譯的不是很合理,所以在括號中寫出了原句。
如果有地方翻譯的不合理,請多多指教。
修改配置文件(Changing Configuration)
輪流日志文件(Rotating Log-files)
平滑升級(Upgrading Executable on the Fly)
可以用信號控制nginx。主進程的ID默認情況下被寫入/usr/local/nginx/logs/nginx.pid文件。這個名字可以在配置時修改或者在nginx.conf文件中使用pid指令。主進程支持以下信號:
TERM, INT 快速關機 QUIT 正常關機 HUP 更改配置,緊跟著一個被改變的時區(qū)(僅適用于FreeBSD和Linux) , 用新的配置開始一個新的工作進程, 正常關掉舊的工作進程。 USR1 重新打開日志文件 USR2 升級可執(zhí)行文件 WINCH 工作進程正常關機
個人工作進程也可以使用信號控制,盡管并不是必須的。支持的信號有:
TERM, INT 快速關機 QUIT 正常關機 USR1 重新打開日志文件 WINCH 調試異常終止(要求debug_points 可用)修改配置文件
為了讓nginx重讀配置文件,一個HUP信號應該被發(fā)送到主進程。主進程首先檢查語法的有效性,然后試圖應用新的配置,即打開日志文件和新的監(jiān)聽套接字。如果失敗,它會回滾變化的地方,并繼續(xù)使用舊的配置。如果成功了,它會開啟新的工作進程,并向舊的進程發(fā)送正常關機的消息。舊的工作進程關閉監(jiān)聽的套接字并繼續(xù)服務舊的客戶端。當服務完所有的客戶端,舊的工作進程會關閉。
讓我們通過示例來說明。假設nginx是運行在FreeBSD 4.x 上的,這個命令是:
ps axw -o pid,ppid,user,%cpu,vsz,wchan,command | egrep "(nginx|PID)"
產生以下輸出:
PID PPID USER %CPU VSZ WCHAN COMMAND 33126 1 root 0.0 1148 pause nginx: master process /usr/local/nginx/sbin/nginx 33127 33126 nobody 0.0 1380 kqread nginx: worker process (nginx) 33128 33126 nobody 0.0 1364 kqread nginx: worker process (nginx) 33129 33126 nobody 0.0 1364 kqread nginx: worker process (nginx)
如果HUP被傳達到主進程,輸出變成:
PID PPID USER %CPU VSZ WCHAN COMMAND 33126 1 root 0.0 1164 pause nginx: master process /usr/local/nginx/sbin/nginx 33129 33126 nobody 0.0 1380 kqread nginx: worker process is shutting down (nginx) 33134 33126 nobody 0.0 1368 kqread nginx: worker process (nginx) 33135 33126 nobody 0.0 1368 kqread nginx: worker process (nginx) 33136 33126 nobody 0.0 1368 kqread nginx: worker process (nginx)
舊的工作進程之中有一個ID為333129的仍舊在工作。一段時間后退出:
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 1368 kqread nginx: worker process (nginx) 33136 33126 nobody 0.0 1368 kqread nginx: worker process (nginx)輪流日志文件(Rotating Log-files)
為了輪流日志文件,它們首先需要重命名。之后USR1信號應該被發(fā)送到主進程。
主進程將重新打開當前所有的日志文件,并為它們分配工作進程正在運行下的一個非特權用戶作為擁有者。在重新打開成功之后,主進程會關閉所有打開的文件,并向工作進程發(fā)送消息請求它們重新打開文件。工作進程也會立即打開新的文件并關閉舊的文件。因此,舊文件幾乎可立即用于post processing,比如壓縮。
為了平滑升級服務器,首先新的可執(zhí)行文件應放置在舊文件的地方(the new executable file should be put in place of an old file first.)。在USR2信號被發(fā)送到主進程之后。主進程首先在新文件重命名文件中的ID帶著.oldbin后綴,比如/usr/local/nginx/logs/nginx.pid.oldbin,然后啟動新的可執(zhí)行文件進而輪流啟動新的工作進程:
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)
在這之后所有的工作進程(舊的和新的)都繼續(xù)接受請求。如果WINCH信號傳送到了第一個主進程,它會發(fā)送消息到它的工作進程,要求它們正常關機,然后它們將會退出:
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)
一段時間之后,只有新的工作進程會處請求:
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)
應該注意的是舊的主進程并沒有關閉它的監(jiān)聽套接字,而且在需要的情況下,它可以被用來再一次啟動它的工作進程。如果處于某些原因,新的可執(zhí)行文件工作不能被接受,可以做以下之一:
發(fā)送HUP信號給舊的主進程。舊的主進程會啟動新的工作進程在沒有重讀配置文件的情況下。之后,通過
發(fā)送QUIT信號給新的主進程,所有新的進程都可以正常關閉。
發(fā)送TERM信號給新的主進程。然后它會發(fā)送消息給它的工作進程請求它們立即退出,它們幾乎都立即退出。(如果新的進程由于某些原因沒有退出,應該把KILL信號發(fā)送給它們,強制他們退出。)當新的主進程退出時,舊進程會自動地啟動它新的進程。
如果新的主進程退出,舊的主進程會丟棄文件中.oldbin后綴文件名的進程ID。
如果升級成功,舊的主進程應該發(fā)送QUIT信號,只有新的進程會存在:
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)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/39330.html
摘要:主進程首先檢查語法的有效性,然后試圖應用新的配置,即打開日志文件和新的監(jiān)聽套接字。舊的工作進程關閉監(jiān)聽的套接字并繼續(xù)服務舊的客戶端。 [nginx文檔翻譯系列] 控制nginx 原文鏈接:http://nginx.org/en/docs/cont...轉自我的GitHub有些地方覺得翻譯的不是很合理,所以在括號中寫出了原句。如果有地方翻譯的不合理,請多多指教。 修改配置文件(Chan...
摘要:主進程的目的是為了讀取和評估配置并保持工作進程。默認情況下,這個配置文件名為。如果一個塊指令在大括號中有其他的指令,則稱之為上下文如和。放在配置文件最外面的指令的稱之為主文,指令在主文中在中,在中。注意指令已經被放置在環(huán)境中。 原文鏈接:http://nginx.org/en/docs/begi...轉自我的github有些地方覺得翻譯的不是很合理,所以在括號中寫出了原句。如果有地方翻...
摘要:主進程的目的是為了讀取和評估配置并保持工作進程。默認情況下,這個配置文件名為。如果一個塊指令在大括號中有其他的指令,則稱之為上下文如和。放在配置文件最外面的指令的稱之為主文,指令在主文中在中,在中。注意指令已經被放置在環(huán)境中。 原文鏈接:http://nginx.org/en/docs/begi...轉自我的github有些地方覺得翻譯的不是很合理,所以在括號中寫出了原句。如果有地方翻...
閱讀 3511·2021-11-18 10:02
閱讀 946·2021-09-04 16:48
閱讀 2033·2019-08-30 15:55
閱讀 3532·2019-08-30 15:52
閱讀 1810·2019-08-30 14:08
閱讀 3552·2019-08-30 13:19
閱讀 1136·2019-08-27 10:53
閱讀 3116·2019-08-26 12:11