關於nginx訊號控制的「故障」案例

2021-09-03 10:10:39 字數 2669 閱讀 1983

關於nginx訊號控制的「故障」案例

最近幾天發現nginx的日誌老切割不成功,遂來查詢問題。

最開始以為是logrotate的指令碼問題,遂手動切割,執行以下的命令

logrotate -vf /etc/logrotate.d/nginx  

發現執行這個是沒有問題的,終於,在service nginx restart後,發現了問題

問題是在用service nginx restart後,nginx.pid檔案才會自動消失,於是,仔細檢查指令碼,發現一些端倪啊,乙個字眼出現了

killproc $prog -quit 

-quit從容關閉,也就是說這個程序是慢慢關閉的,不是立即關閉的,於是驗證。如圖

檢視程序如下

可以看到,nginx正在shutdown之中,但沒有一下子全部關閉了。

隨著時間的推移,nginx老的程序在繼續關閉中……

到最後,nginx之前的老程序全部關閉……

這時,nginx.pid檔案沒有了

到此,nginx.pid檔案神奇消失的問題終於被找出來了。

繼續分析-----日誌分割,依靠的是nginx.pid獲取nginx的程序號,分割成功後,出現的情況是nginx依然昨天的日誌,不寫分割後的日誌。

那麼現在需要對這個指令碼進行修改,把stop函式中的-quit改為-term 立即關閉。(話說我這個指令碼是來自官網改造的,看來官網也不是100%的準確哦,做運維要細心啊)

官方指令碼位址

再次運用此指令碼重啟

service nginx restart 

問題不再重現,已經解決了。

總結,乙個小小的引數,可能會引發無限大的問題,所以,學知識要細心啊!

附錄一:nginx的訊號控制

term,int 快速關閉; 

quit  從容關閉 

user1  重新開啟日誌檔案,在切割日誌的時候用途較大; 

user2  平滑公升級可執行程式; 

winch  從容關閉工作程序; 

附錄二:nginx的啟動指令碼如下

附錄三:日誌切割指令碼如下

# cat /etc/logrotate.d/nginx  

/var/log/nginx/*.log  

Nginx的訊號控制

以下是自學it網 中級班上課筆記 www.zixue.it nginx的訊號控制 term,int quick shutdown quit graceful shutdown 優雅的關閉程序,即等請求結束後再關閉 hupconfiguration reloadstart the new worker...

nginx訊號控制

t erm,int quick shutdown quit graceful shutdown 優雅的關閉程序 即等請求結束後再關閉 hupconfiguration reload start the new worker processes with a new configuration gra...

Nginx控制訊號

nginx可以使用訊號來控制主程序,nginx啟動後缺省會將程序號寫入nginx.pid中。nginx主程序支援的訊號 term,int 快速關閉 quit 從容關閉 hup 過載配置 usr1 重新開啟日誌檔案 usr2 平滑公升級可執行程式 winch 從容關閉工作程序 nginx工作程序支援的...