Nginx日志切割

—————shanks

1、查看logrotate的位置

[root@jiaofu-01 old_log]# which logrotate

/usr/sbin/logrotate

记着这个地方哦

2、vim /etc/logrotate.d/nginx

###你可以man logrotate

/usr/local/nginx-1.0/logs/*.log {

###不压缩

Nocompress

###空文件也搞

Ifempty

###写时提醒,你会在日志里看到一条记录

Copytruncate

###新建

Create

###告诉它把log放哪去

olddir /usr/local/nginx-1.0/logs/old_log

###保留7个,这个貌似在这里没什么用,没加周期的话

rotate 7

}

3、进入nginx的basedir,写个脚本

Cd /usr/local/nginx-1.0

[root@jiaofu-01 nginx-1.0]# vim do_nginx_log.sh

#!/bin/bash

###重做后原来的日志被移动的位置

base_dir=/usr/local/nginx-1.0

olddir=${base_dir}/logs/old_log

access_name=access.log

err_name=error.log

User=hr

if [ -d ${olddir} ]

then

:

else

mkdir -p ${olddir}

fi

###调用logrotate重做日志

/usr/sbin/logrotate -vf /etc/logrotate.d/nginx

###重新加载nginx配置

source ${base_dir}/nginxctl.sh redolog

###定义时间格式

Time=$(date -d “yesterday” +”%Y-%m-%d”)

###所有操作均在old目录进行

cd ${olddir}

###改变移动后的日志文件的文件名

for i in $(ls ./ | grep “^\(.*\)\.[[:digit:]]$”)

do

mv ${i} ./$(echo ${i}|sed -n ‘s/^\(.*\)\.\([[:digit:]]\)$/\1/p’)-$(echo ${Time})

done

###打包并且删除

j=$(ls *-${Time})

echo $j

tar zcf ${Time}.tar.gz $j && rm -rf $j

###60天干掉

find ${olddir} -name “*.tar.gz” -mtime 60 -type f -exec rm -rf {} \;

###不太放心,做个判断

if [ -f ${base_dir}/logs/${access_name} ]

then

chown ${User}.${User} ${base_dir}/logs/${access_name}

else

touch ${base_dir}/logs/${access_name} && chown ${User}.${User} ${base_dir}/logs/${access_name} || source ${base_dir}/nginxctl.sh restart

fi

if [ -f ${base_dir}/logs/${err_name} ]

then

chown ${User}.${User} ${base_dir}/logs/${err_name}

else

touch ${base_dir}/logs/${err_name} && chown ${User}.${User} ${base_dir}/logs/${err_name} || source ${base_dir}/nginxctl.sh restart

fi

4、写个cron

Crontab –e

0 0 * * * /usr/local/nginx-1.0/ do_nginx_log.sh > /dev/null 2>&1