关于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妙用
时间: 2024-10-16 10:11:52