一、编写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
保存退出。