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