您的位置:首页 > 运维架构 > Nginx

nginx日志定时切割

2016-07-16 11:33 811 查看
关于nginx日志定时切割、一般有两种方案,第一用logrotate,它是一个linux系统日志的管理工具、它可以切割、压缩等其他软件的日志文件软件;logrotate是基于crontab运行的,所以这个时间点是由crontab控制的,具体可以查询crontab的配置文件/etc/anacrontab。第二种用shell脚本定时切割。
第一种方案:logrotate

1、安装logrotate,我这里是centos直接用:yum -y install logroate

2、安装成功后、配置logrotate。/etc/logrotate.conf是logrotate的配置文件,打开该文件内容,显示如下:



标红处很关键,引入文件用的,所以我在该引入目录下新建了一个nginx文件,内容如下:
/var/log/nginx/access/*.log {
#按天切割
daily
#在日志轮循期间,任何错误将被忽略
missingok
#一次存储30个日志文件。对于第31个日志文件,时间最久的那个日志文件将被删除。
rotate 30
#按日期格式显示切割后的文件名
dateext
dateformat _%Y-%m-%d
#不采用压缩
#compress
#delaycompress
#文件为空时不进行转存
notifempty
#以指定的权限和用书属性,创建全新的日志文件,同时logrotate也会重命名原始日志文件。
create 755 web web
sharedscripts
postrotate
kill -USR1 `ps aux | grep "nginx: master process" | grep -v grep | awk '{print $2}'`
sh /var/www/webroot/nginxlogrotate/access_log_archive.sh
endscript
}
附日志归档脚本/var/www/webroot/nginxlogrotate/access_log_archive.sh内容:
#/bin/sh
lib_path="/var/log/nginx/archive/"
date_path="`date +%Y`/`date +%m`/`date +%d`"
path="${lib_path}${date_path}"
if [ ! -d "${path}" ]; then
mkdir -p "${path}"
fi
chmod -R 777 ${path}
suffix_date=`date +%Y-%m-%d`
#日志列表
log_list=(ds img koubei shanghu static wl wx super m fc mantis)
#重命名日志文件
for i in ${log_list[@]};
do
if [ -f "/var/log/nginx/access/${i}.log_${suffix_date}" ];then
mv "/var/log/nginx/access/${i}.log_${suffix_date}" "${path}/${i}.log"
rm -f "/var/log/nginx/access/${i}.log_${suffix_date}"
fi
done

配置完成这些以后,还有一个很关键的配置文件,/etc/anacrontab,内容如下:

标红处我将定时任务运行的时候改为0=23点,然后自定义cron.daily的执行时间为每天的23:59,如此这般每天即可成功运行。二、shell脚本
#!/bin/bash
#设置日志文件存放目录
log_path="/usr/local/nginx/log/"
#设置pid文件
pid_path="/usr/local/nginx/nginx.pid"
#日志列表
log_list=(ds img koubei shanghu static wl wx super m fc)
#重命名日志文件
for i in ${log_list[@]};
do
#echo ${log_path}${i}_$(date -d "yesterday" +"%Y%m%d").log
mv ${log_path}${i}.log ${log_path}${i}_$(date -d "yesterday" +"%Y%m%d").log
done
#向nginx主进程发信号重新打开日志
kill -USR1 `cat ${pid_path}`

然后创建定时任务即可,定时任务可以参考我之前的文章 crontab妙用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux nginx logroate