Nignx下网站访问日志分割

运维 ouk 899℃ 0评论

今天发现一问题,打开nginx的访问日志时,发现单个日志文件有50多G,网上一查,可能nginx版本过低,不能自动分割日志文件,

网上提供的关于分割nginx访问日志的文章都是关于用脚本控制分割,然后通过crond定时执行,

通过尝试发现脚本分割的方法可行,具体操作如下:

首先,我现在的需求是要将日志文件中的所有文件进行分割,所以需要获取所以log文件名称,然后放入数组,在脚本中for循环执行

不过在写脚本前,需要找到nginx.pid的路径

具体脚本

#!/bin/bash

#日志路径
logs_path=”/test/log”

#nginx.pid路径

pid_path=”/var/run/nginx.pid”

#定义日志存放路径根据时间
year=$(date -d “yesterday” +%Y)
month=$(date -d “yesterday” +%m)
day=$(date -d “yesterday” +%d)
cut_log_path=/mnt/weblog/${year}/${month}/${day}
YESTERDAY=$(date -d “yesterday” +%Y%m%d)

#判断存放路径是否存在
if [ ! -d $cut_log_path ];then
mkdir -p $cut_log_path
fi

#读取所有日志文件名称,然后写入到一个txt文本中
if [ -d $logs_path ];then
cd $logs_path
ls | grep “.log” > /tmp/nginxloglist.txt
else
exit 1
fi

#for循环执行脚本分割,其实就是一个move过程

for logname in `cat /tmp/nginxloglist.txt`
do
mv $logs_path$logname $cut_log_path/${YESTERDAY}_$logname
done

#表示告诉主进程重新打开日志文件,如果不加该命令,系统会继续写上面别名的文件中

kill -USR1 `cat ${pid_path}`
~

最后在crontab中加入定时执行

0 0 * * *  /bin/bash/nginx_log.sh    表示每天零点执行

转载请注明:OUK技术人生 » Nignx下网站访问日志分割

喜欢 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址