nginx日誌切割遇到的問題
阿新 • • 發佈:2018-11-19
過大 run 方法 open 自己 工作 kill ont nic 背景:為了避免日誌文件過大不方便查看,準備對日誌切割,我用的linux系統自帶的logrotate進行切割,具體切割參數請查詢logrotate相關資料,下面只寫出切割的配置,也是網上參考別人的文章的方法,但遇到了問題
2.日誌切割之後,文件是生成了,可總是大小為0,發現nginx.pid丟失,為什麽會丟失,開始思考這個問題
postrotate
if [ -f /export1/logs/nginx.pid ]; then
kill -USR1
fi
endscript
}
新建文件
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點多
解決方法:經過多方查找資料
- 下面文件可以設置計劃任務的執行時間,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
if [ -f /export1/logs/nginx.pid ]; then
kill -USR1
cat /export1/logs/nginx.pid
fi
endscript
}
nginx日誌切割遇到的問題