脚本如下:
#专用access分割日志
echo "为 nginx 的access按天分割备份脚本!"
echo "一次性分割所有日期日志,支持、年、月、日定时!"
echo "未做路径判断!未做路径记忆!"
echo "read交互不便时,请自行赋值"
#access日志路径
read -p "请输入access所在路径(绝对路径):" LOG
#LOG=/home/NGO/nginx-1.20/log/access.log
#输出目录
read -p "请输入分割后文件导出目录(绝对路径):" OUTDIR
#OUTDIR=/home/NGO/BAK/access
#Nginx程序所在路径!!!请核实路径
echo "需要nginx -s reopen 重新生成access日志使用"
read -p "请输入nginx程序所在路径(绝对路径):" NGINXPATH
#NGINXPATH="/home/NGO/nginx-1.20/sbin/nginx"
####################### 日期在第4列 (则无需修改) #######################
#10.96.20.252 - - [20/Nov/2021:00:01:41 +0800] "POST /ClientUpgrade/clientmgt/B
#日期所在列数(以空格分割,第4列就写$4,请注意是单引号)
DATEF='$4'
######以下无需修改
echo "请等待,正则进行日志分割……"
#原有log移动到LOGPATH
LOGPATH=/tmp/tmplog
mv $LOG $LOGPATH
#移动完成,重新生成日志文件
$NGINXPATH -s reopen
#获取日志名称
FILENAME=`echo $LOGPATH|awk -F "/" '{print $NF}'`
#log分离
#当前时间
NOWDATE=`date +%F_%T`
#获取日志中的日期,临时存放
TMPDATE=/tmp/tmpdate
#日期所在第4列(以空格分割)
cat $LOGPATH | grep "^[0-9]" |awk '{print '$DATEF'}'|awk -F "[" '{print $2}'|awk -F ":" '{print $1}'|sort -u > $TMPDATE
#分割线
LINE='-'
#创建输出目录
mkdir -p $OUTDIR
#获取日志名称
FILENAME=`echo $LOG|awk -F "/" '{print $NF}'`
#for循环分割
for i in `cat $TMPDATE`
do
cd $OUTDIR
echo "正在分割 $i"
#删除日期中'/'
echo $i|sed 's#/##g' > /tmp/DMY
DDATE=`cat /tmp/DMY`
#分割
cat $LOGPATH |grep "$i" > $FILENAME$LINE$DDATE
#tar打包压缩
TAREX=.tar.gz
tar -zcf $FILENAME$LINE$DDATE$TAREX $FILENAME$LINE$DDATE
done
echo "分割完成:输出目录:$OUTDIR"
发表评论