nginx可以通過向其發送信號來進行管理。默認情況下主進程的進程ID寫到文件/usr/local/nginx/logs/nginx.pid中。當然也可以在配置文件中自定義該pid文件,自定義使用pid指令來進行修改。主進程支持如下信號:
TERM, INT | fast shutdown |
QUIT | graceful shutdown |
HUP | changing configuration, keeping up with a changed time zone (only for FreeBSD and Linux), starting new worker processes with a new configuration, graceful shutdown of old worker processes |
USR1 | re-opening log files |
USR2 | upgrading an executable file |
WINCH | graceful shutdown of worker processes |
盡管不是必須,單個的工作進程同樣可以通過下列信號進行控制。工作進程支持如下信號:
TERM, INT | fast shutdown |
QUIT | graceful shutdown |
USR1 | re-opening log files |
WINCH | abnormal termination for debugging (requires debug_points to be enabled) |
改變配置文件
為使nginx重新讀取配置文件,可以想主進程發送一個HUB信號。主進程首先檢測語法的有效性,然后嘗試應用到新的配置中即打開日志文件和新的監聽套接字:若失敗,主進程回滾到改變前的配置,並繼續使用舊的配置運行。若成功則開啟新的工作進程,給舊的工作進程發送完整性關閉命令,舊的工作進程關閉監聽套接字,繼續處理舊的請求並返回給客戶端,當所有的客戶端請求處理完后,舊的工作進程關閉。
舉個例子,假定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)
可以看到PID為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)
---出去一段時間