Nginx日志切割 —————shanks 1、查看logrotate的位置 [iyunv@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 [iyunv@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
|