Linux下定时切割Nginx访问日志并打包压缩的Shell脚本

之前写过这篇文章,但是由于上次的数据丢失故障这篇日志没有了。于是我又重新写了这个脚本,再次贴出来,给大家。

#!/bin/bash
logs_path=/home/logs/www/
arch_log_path=${logs_path}$(date -d "yesterday" +"%Y%m/%d")/

mkdir -p ${arch_log_path}
cd ${logs_path}
for i in `ls *.access.log`
do
        tar zcf ${i}.tar.gz -C ${logs_path} ${i}
        mv ${i}.tar.gz ${arch_log_path}
        rm -rf ${i}
done

kill -USR1 `cat /usr/local/nginx/nginx.pid`


使用时注意修改logs_path为你自己的Nginx访问日志目录。我的Nginx是按照虚拟主机分列访问日志的,每个日志文件的格式如localhost.access.log,该脚本会匹配日志目录下的所有*.access.log文件,打包压缩后移动到 年月/日 目录下面。大家可以根据自己需要再行调整。设置成功后在crontab里面加入定时计划。

sudo crontab -e

启动VI编辑器,输入以下内容:

 0 0 * * * /path/to/cut_nginx_log.sh

其中最后一部分请修改成你的切割脚本所在的路径。定时器设定在每天0时归档昨天的日志。