Nginx日志默認情況下統統寫入到一個文件中,文件會變的越來越大,非常不方便查看分析,也會造成服務器硬盤占用越來越大。我們通常是每天對Nginx的日志做切割。
Nginx日志切割方法有很多種,本文主要講的是用shell腳本對日志壓縮切割。
Nginx日志切割-單個日志
有時候我們的日志只有兩個,一個access的,一個error的。可能只有access的日志比較大,通常錯誤日志又不會太大,那么需求只對access的日志進行切割。這時候用這個單個日志切割的腳本即可,優點是比較簡單。
#!/bin/sh
cd /usr/local/nginx/logs/
#壓縮并按日期命名access.log日志
tar -zcvf log_history/access_`date +%Y%m%d`.log.tar.gz access.log
#刪除源日志
rm -fr access.log
#刪除15天前的切割日志
find /usr/local/nginx/logs/ -name "*.log.tar.gz" -type f -mtime +15 -exec rm {} \; > /dev/null 2>&1
#向 Nginx 的進程發送 USR1 信號以重新打開日志文件
killall -s USR1 nginx
Nginx日志切割-多個日志
若Nginx配置了虛擬主機等會保存多個日志的,可能還需要對多個日志進行切割,那么就可以使用以下腳本進行多個日志切割。
#!/bin/sh
if [ ! -d /usr/local/nginx/logs/log_history ]; then
mkdir /usr/local/nginx/logs/log_history
fi
cd /usr/local/nginx/logs/
array=(access error host.access host.error host.ssl-access host.ssl-error)
for data in ${array[@]}
do
tar -zcvf log_history/${data}_`date +%Y%m%d`.log.tar.gz ${data}.log >> /dev/null
rm -fr ${data}.log
done
find /usr/local/nginx/logs/log_history/ -name "*.log.tar.gz" -type f -mtime +15 -exec rm {} \; > /dev/null 2>&1
killall -s USR1 nginx
Nginx日志切割-定時任務
無論是單個日志切割,還是多個日志切割,都需要使用cron服務定期執行該腳本,下面設置成的是每晚23點59執行,這樣nginx訪問日志正好記錄的是全天的訪問記錄。
#crontab -e 59 23 * * * /usr/local/nginx/logs/nginx_access_log.sh

定時任務
除特別注明外,本站所有文章均為成航先森 www.cnidcc.cn 原創,本文共1243個字
轉載請注明出處來自http://www.cnidcc.cn/nginx_log_cutting.html
轉載請注明出處來自http://www.cnidcc.cn/nginx_log_cutting.html

川公網安備 51011202000104號
用shell腳本對日志壓縮切割的方法很不錯,感謝分享!
學習了