Nginx 保留3 天日志,删除3天前所有日志。

一、编写shell 脚本:
cd /script
vim nginx_log_bl3.sh
#!/bin/bash
#把语言环境设置成英文,因为Nginx的日志中记录的日期格式是英文的格式
#如果你的环境是,中文的话,必须要加这条命令,本来就是英文环境的
#可以不用加,加上也没有问题。
LANG=en_US.utf8
#日志文件的路径
LOGFILE="/tmp/access.log.bak"
#从当天算,第3天的日期
DATE3=`date +%d/%b/%Y -d '-2 days'`
#从日志中取出第3天的第一条日志的行号,因为Nginx日志记录是最新的在最下面。
COWNUM=`cat -n $LOGFILE |grep $DATE3 |head -1|awk '{print $1}'`
#这里减1 是因为,后面的sed删除的时候,从,1,到,第3天的第一条日志的行号,
#系统也会把 这条日志删除,所以这里减1,
#行号就变成了3天前的最后一条日志的行号
let COWNUM=${COWNUM}-1
#这时,日志记录剩下的就是从当天算,这 3 天的日志,再过滤第3天的日期
#取出来的行号其实为 1,再减去1,变成 0,后面的 sed 1,0d 会删除第一条记录
#这时删除的其实是保留下来的这 3天的第 一 条日志,这样就容易造成问题。
#所以后面有一个判断,避免多次执行脚本出现的问题。
if [ $COWNUM -le 1 ];then
exit
else
sed -i "1,${COWNUM}d" $LOGFILE
fi
if [ $? -eq 0 ];then
echo "OK"
else
echo "Is not ok... Please check....!!!!!!"
fi
保存退出。
chmod +x ./nginx_log_bl3.sh
二、测试:
第一次执行:



第二次执行脚本:



三、添加到计划任务:
vim /etc/crontab


保存退出。