Nginx 官方文件翻譯 nginx 控制

2021-08-09 08:18:16 字數 4389 閱讀 3647

可以用訊號控制nginx。主程序的id預設情況下被寫入/usr/local/nginx/logs/nginx.pid檔案。這個名字可以在配置時修改或者在nginx.conf檔案中使用pid指令。

主程序支援以下訊號:

-term, int - 快速關閉

-quit - 友好的關閉

-hup - 修改配置,保持乙個時區的改變(僅freebsd&linux),友好的關閉舊的工作程序,使用新配置建立新的工作程序

-usr1 - 重新開啟日誌檔案

-usr2 - 公升級可執行檔案(nginx主程式)

-winch - 友好的關閉所有的工作程序

儘管你不必自己操作工作程序,但是它們也支援一些訊號::

-term, int    快速關機

-quit 正常關機

-usr1 重新開啟日誌檔案

-winch 除錯異常終止(要求debug_points 可用)

為了讓nginx重讀配置檔案,乙個hup訊號應該被傳送到主程序。主程序首先檢查語法的有效性,然後試圖應用新的配置,即開啟日誌檔案和新的監聽套接字。如果失敗,它會回滾變化的地方,並繼續使用舊的配置。如果成功了,它會開啟新的工作程序,並向舊的程序傳送正常關機的訊息。舊的工作程序關閉監聽的套接字並繼續服務舊的客戶端。當服務完所有的客戶端,舊的工作程序會關閉。

讓我們通過示例來說明。假設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「signal傳送給nginx主程序,輸出如下:

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)

上面可以發現,33129的工作程序,仍然在繼續工作。一段時間後,輸出如下:

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)

此時,所有的舊的工作程序,都已經全部關閉。

為了輪詢日誌檔案,這些日誌檔案首先應該被重新命名(輪詢的日誌檔案命名有一定的規律)。接著,傳送」usr1「signal給主程序。主程序將重新開啟所有當前開啟的日誌檔案,並且分配給它們乙個沒有特權的使用者作為owner使用者(工程進行的執行使用者,例如上節中的nobody)。重新開啟成功後,主程序關閉所有開啟的檔案,並傳送訊息給工作程序,要求它們去重新開啟日誌檔案。工作程序開啟新檔案,並馬上關閉舊檔案。結果,舊檔案幾乎立馬可用於後處理,例如:壓縮。

為了公升級伺服器,新的可執行檔案應該首先被寫入到舊檔案中。接著,傳送」usr2「signal給主程序。主程序首先重新命名 」儲存程序id的檔案「(/usr/local/nginx/logs/nginx.pid)為乙個新檔案,字尾是」.oldbin「(/usr/local/nginx/logs/nginx.pid.oldbin),接著,啟動乙個新的可執行檔案,反過來,再啟動新的工作程序:

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)

之後,所有的工作程序(新的&舊的)繼續接收請求。如果 」winch「 signal傳送給第乙個主程序,它將傳送訊息給它的子工作程序,請求它們友好的關閉,然後子工作程序開始關閉:

一段時間後,只有新的工作程序來處理請求:

注意:舊的主程序並沒有關閉它監聽的sockets,當需要時,它仍然能夠開啟它的子工作程序。如果,由於某些原因,新的可執行檔案工作不正常,可執行下面的乙個:

如果新的主程序退出,然後舊的主程序忽略 」.oldbin「 字尾檔案。

如果公升級成功,之後應該傳送」quit「signal給舊的主程序,最後,只有新的程序會被保留下來:

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)

Core Foundation 官方文件翻譯

core foundation框架中常用的隱含型別 使用這些隱含型別時需要自己初始化,自己去釋放記憶體。所以需要記住,在初始化的同時在相應位置釋放。以防出現記憶體問題。1.cfstringref 其他方法用的時候可以檢視文件 void testcfstringref 2 cfarrayref,還有很...

Docker 官方文件翻譯

docker compose 是利用docker來執行多個容器的工具。利用compose 在乙個檔案中定義多個容器,然後利用乙個單獨的命令,可以執行你所想做的任何事情。compose 能較好的作為開發環境的假設,伺服器腳手架以及ci方面的應用。我們不推薦使用在生產環境中。使用compose 需要一下...

voltdb官方文件翻譯 一)

最近研究voltdb,發現網上的資料很少。但是官網的文件講述的還是挺清楚的。所以就把看後的觀點記錄下來,方便後來人,廢話不多說,進入正題。首先,voltdb是什麼。它是一款記憶體資料庫,號稱實現了acid和事務隔離,快速解決大資料量和大併發量的秒級相應。本人實際使用了一下感覺還是蠻好的。因為volt...