linux logrotate進行日誌分割
來源:互聯網
上載者:User
logrotate日誌分割配置:
# cat /etc/logrotate.d/nginx
/data/nginx_logs/*.access_log #nginx日誌所在目錄
{
nocompress #不對記錄檔進行轉儲壓縮
daily #指定轉儲周期為每天
copytruncate #用於還在開啟中的記錄檔,把當前記錄備份並截斷
create #建立新的記錄檔
ifempty #即使是空檔案也轉儲
olddir /data/nginx_logs/days #轉儲後的記錄檔放入指定的目錄,必須和當前記錄檔在同一個檔案系統
rotate 0 #指定記錄檔刪除之前轉儲的次數,0 指沒有備份,5 指保留5個備份
}
#####################################################################
日誌分割指令碼:
#!/bin/bash
#建立轉儲日誌壓縮存放目錄
mkdir -p /data/nginx_logs/days
#手工對nginx日誌進行切割轉換
/usr/sbin/logrotate -vf /etc/logrotate.d/nginx
#目前時間
time=$(date -d "yesterday" +"%Y-%m-%d")
#進入轉儲日誌存放目錄
cd /data/nginx_logs/days
#對目錄中的轉儲記錄檔的檔案名稱進行統一轉換
for i in $(ls ./ | grep "^\(.*\)\.[[:digit:]]$")
do
mv ${i} ./$(echo ${i}|sed -n 's/^\(.*\)\.\([[:digit:]]\)$/\1/p')-$(echo $time)
done
#對轉儲的記錄檔進行壓縮存放,並刪除原有轉儲的記錄檔,只儲存壓縮後的記錄檔。以節約儲存空間
for i in $(ls ./ | grep "^\(.*\)\-\([[:digit:]-]\+\)$")
do
tar jcvf ${i}.bz2 ./${i}
rm -rf ./${i}
done
#只保留最近7天的壓縮轉儲記錄檔
find /data/nginx_logs/days/* -name "*.bz2" -mtime 7 -type f -exec rm -rf {} \;
######################################################
#給指令碼附上執行許可權,放到crontab裡執行
#logrotate
0 0 * * * /usr/local/sbin/logrotate-nginx.sh > /dev/null 2>&1