現在所做的系統每一小時生成一個日誌文件,由於日誌量較大,用Shell實現了一個日誌打包的功能。
我們系統生成日誌文件名稱格式為:all.log.2013-08-27-14 表示2013-08-27 14:00的日誌。
1、第一個腳本: logcompress.sh
在crontab下配置腳本定時執行,由於5天內的日誌需要經常查看,以便處理問題。所以該腳本每天執行一次,
打包當前時間之前第五天的日誌,如當前時間為2013-08-27,腳本每天淩晨01:00執行,打包2013-08-22的日誌文件。
crontab配置格式如下:
0 1 * * * cd /log/eas/all && /app/logcompress/logcompress.sh >> /log/logcompress/logcompress.log
#! /bin/bash
name=`date +%Y-%m-%d --date='5 days ago'`;
echo `date '+%Y-%m-%d %H:%M:%S'`" 打包程序執行開始!";
echo '---'$name'日誌打包開始!---';
for((i=0;i<24;i++))
do
if [ $i -lt 10 ]
then
if [ -f all.log.$name-0$i ]
then
echo "tar:all.log.$name-0$i => all.$name-0$i.tar.gz";
tar zcf all.$name-0$i.tar.gz all.log.$name-0$i;
if [ -f all.$name-0$i.tar.gz ]
then
echo "rm:all.log.$name-0$i";
rm -rf all.log.$name-0$i;
fi;
sleep 10;
fi;
else
if [ -f all.log.$name-$i ]
then
echo "tar:all.log.$name-$i => all.$name-$i.tar.gz";
tar zcf all.$name-$i.tar.gz all.log.$name-$i;
if [ -f all.$name-$i.tar.gz ]
then
echo "rm:all.log.$name-$i";
rm -rf all.log.$name-$i;
fi;
sleep 10;
fi;
fi;
done;
echo '---'$name'日誌打包完成!---';
echo `date '+%Y-%m-%d %H:%M:%S'`" 打包程序執行完成!";
2、prior_logcompress.sh
該腳本用於打包歷史日誌文件,系統日誌名稱格式為:all.log.2013-08-27-14,在服務器日誌目錄下,手動執行該腳本。
命令格式為:./prior_logcompress.sh 20130827 30 (表示打包2013-08-27之前30天的所有日誌文件)
#!/bin/bash
c_logcompress(){
name=$1;
echo '---'$name'日誌打包開始!---';
for((i=0;i<24;i++))
do
if [ $i -lt 10 ]
then
if [ -f all.log.$name-0$i ]
then
echo "tar:all.log.$name-0$i => all.$name-0$i.tar.gz";
tar zcf all.$name-0$i.tar.gz all.log.$name-0$i;
if [ -f all.$name-0$i.tar.gz ]
then
echo "rm:all.log.$name-0$i";
rm -rf all.log.$name-0$i;
fi;
sleep 5;
fi;
else
if [ -f all.log.$name-$i ]
then
echo "tar:all.log.$name-$i => all.$name-$i.tar.gz";
tar zcf all.$name-$i.tar.gz all.log.$name-$i;
if [ -f all.$name-$i.tar.gz ]
then
echo "rm:all.log.$name-$i";
rm -rf all.log.$name-$i;
fi;
sleep 5;
fi;
fi;
done;
echo '---'$name'日誌打包完成!---';
sleep 60;
}
c_exit(){
echo '-----------------------------';
if [ $# -lt 1 ]
then
echo `date '+%Y-%m-%d %H:%M:%S'` '打包程序執行結束!';
else
echo `date '+%Y-%m-%d %H:%M:%S'` '打包程序執行退出!';
fi
exit;
}
echo `date '+%Y-%m-%d %H:%M:%S'` '打包程序執行開始!';
echo '-----------------------------';
if [ $# -lt 1 ]
then
echo '請輸入打包日誌日期參數(格式如:20130701)!';
c_exit 1;
fi;
endDate='';
day='';
if [ $1 ]
then
endDate=$1;
fi;
if [ $2 ]
then
day=$2;
else
day=0;
fi;
if [ $day -eq 0 ]
then
echo '開始執行'$endDate'的日誌打包操作!';
else
echo '開始執行'$endDate'之前'$day'天的日誌打包操作!';
fi;
for((k=0;k<$day+1;k++));
do
tim=`date '+%Y-%m-%d' -d "-$k day $endDate"`;
c_logcompress $tim;
done
c_exit 0;
全站熱搜