關於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工作程序支援的...