shell脚本-nginx日志分割备份


title: "shell脚本-nginx日志分割备份"
date: 2022-01-09
categories:
- "linux"
tags:
- "nginx"
- "nginx日志分割备份"
coverImage: "shell.png"


脚本如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#专用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"