目錄
- 1. 說明
- 2. 常用信號及作用
- 3. 信號控制的具體操作
- 3.1 獲取 Nginx 主進程 PID
- 3.2 發送信號
- 4. 應用場景
- 4.1 重新加載配置文件
- 4.2 日志切割
- 5. 平滑升級 Nginx
- 6. 注意事項
1. 說明
- 1.Nginx 的信號控制是其管理服務的重要機制,通過向主進程發送特定信號,可以實現對 Nginx 的平滑重啟、重新加載配置、關閉服務等操作,而無需停止服務或中斷用戶請求。
2. 常用信號及作用
信號 | 發送方式 | 作用 |
---|---|---|
TERM 或 INT | kill -TERM <PID> 或 kill -INT <PID> | 立即關閉 Nginx 服務,所有工作進程和主進程將直接退出,未完成的請求會被中斷。 |
QUIT | kill -QUIT <PID> | 優雅關閉 Nginx 服務,主進程會等待所有工作進程完成當前請求后再退出。 |
HUP | kill -HUP <PID> | 重新加載配置文件,主進程會啟動新的工作進程,并平滑關閉舊的工作進程。 |
USR1 | kill -USR1 <PID> | 重新打開日志文件,用于日志切割,不會中斷服務。 |
USR2 | kill -USR2 <PID> | 平滑升級 Nginx,啟動新的主進程和新的工作進程,舊進程繼續處理剩余請求。 |
WINCH | kill -WINCH <PID> | 優雅關閉工作進程,通常與 USR2 配合使用,用于平滑升級時關閉舊工作進程。 |
3. 信號控制的具體操作
3.1 獲取 Nginx 主進程 PID
- 1.Nginx 主進程的 PID 通常存儲在配置文件中指定的 PID 文件中,默認路徑為 /usr/local/nginx/logs/nginx.pid 或 /var/run/nginx.pid。
- 2.可以通過以下命令獲取:cat /usr/local/nginx/logs/nginx.pid
3.2 發送信號
- 1.使用 kill 命令向主進程發送信號。
- 2.重新加載配置文件:kill -HUP $(cat /usr/local/nginx/logs/nginx.pid)
- 3.優雅關閉服務:kill -QUIT $(cat /usr/local/nginx/logs/nginx.pid)
- 4.重新打開日志文件(用于日志切割):kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid)
4. 應用場景
4.1 重新加載配置文件
- 1.當修改了 Nginx 配置文件(如 nginx.conf)后,無需停止服務即可使新配置生效
- 2.kill -HUP $(cat /usr/local/nginx/logs/nginx.pid)
- 3.nginx -s reload
4.2 日志切割
- 1.為了防止日志文件過大,可以定期切割日志。
- 2.重命名當前日志文件:mv /usr/local/nginx/logs/access.log /usr/local/nginx/logs/access.log.old
- 3.向 Nginx 主進程發送 USR1 信號,重新打開日志文件:kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid)
- 4.壓縮或歸檔舊日志文件:gzip /usr/local/nginx/logs/access.log.old
5. 平滑升級 Nginx
- 1.當需要升級 Nginx 時,可以使用 USR2 和 WINCH 信號實現平滑升級:
- 2.啟動新的 Nginx 二進制文件:/path/to/new/nginx -c /path/to/nginx.conf
- 3.新進程會作為主進程運行,舊主進程的 PID 會被重命名為 .oldbin。
- 4.向舊主進程發送 USR2 信號,啟動新的工作進程:kill -USR2 $(cat /var/run/nginx.pid)
- 5.向舊主進程發送 WINCH 信號,優雅關閉舊工作進程:kill -WINCH $(cat /var/run/nginx.pid.oldbin)
- 6.確認新進程正常運行后,關閉舊主進程:kill -QUIT $(cat /var/run/nginx.pid.oldbin)
6. 注意事項
- 1.信號發送對象:始終向 Nginx 主進程發送信號,而不是工作進程。
- 2.日志文件權限:確保 Nginx 有權限寫入日志文件,否則 USR1 信號可能無效。
- 3.配置文件語法檢查:在重新加載配置文件前,建議先檢查語法是否正確:nginx -t
- 4.平滑升級風險:在升級過程中,確保新舊版本的配置文件兼容,避免服務中斷。