1. 程式人生 > >nginx日誌切割遇到的問題

nginx日誌切割遇到的問題

過大 run 方法 open 自己 工作 kill ont nic

背景:為了避免日誌文件過大不方便查看,準備對日誌切割,我用的linux系統自帶的logrotate進行切割,具體切割參數請查詢logrotate相關資料,下面只寫出切割的配置,也是網上參考別人的文章的方法,但遇到了問題

新建文件
vi /etc/logrotate.d/nginx.log
/日誌所在路徑/*.log
{
daily
rotate 60
dateext
create 644 root root
postrotate
/bin/kill -HUP cat /opt/phpad/var/run/nginx.pid 2> /dev/null 2> /dev/null || true
endscript
}

問題:1.無法控制每天切割的時間,默認都是在夜裏3點多

2.日誌切割之後,文件是生成了,可總是大小為0,發現nginx.pid丟失,為什麽會丟失,開始思考這個問題

解決方法:經過多方查找資料

  1. 下面文件可以設置計劃任務的執行時間,logrotate是每天輪轉的,可以設置為24點輪轉
    cat /etc/anacrontab
    RANDOM_DELAY=45 #最大延遲時間,改成0
    START_HOURS_RANGE=3-22 #只在03到22點之間執行,改成24
    1 5 cron.daily nice run-parts /etc/cron.daily
    #每天都執行/etc/cront.daily/目錄下的腳本文件,logrotate的腳本就在這個文件下,大家一定要自己去確認,才能真正明白

真實的延遲RANDOM_DELAY+delay。這裏的延遲是5分鐘,加上上面的RANDOM_DELAY,所以實際的延遲時間是5-50之間,開始時間為03-22點,那麽一般就是在03:05-03:50之間執行。
如果RANDOM_DELAY=0,那麽表示準確延遲5min,即03:05執行
這就是為什麽總是在3點多切割的原因

2.調用nginx -s reopen用來打開日誌文件,這樣nginx會把新日誌信息寫入這個新的文件中
這樣完成了日誌的切割工作, 同時切割過程中沒有日誌的丟失。
kill -USR1 等於 nginx -s reopen

切割成功的配置
{
daily
rotate 60
dateext
create 644 root root

postrotate
if [ -f /export1/logs/nginx.pid ]; then
kill -USR1 cat /export1/logs/nginx.pid
fi
endscript
}

nginx日誌切割遇到的問題