环境:
[root@S1-Server logs]# cat /etc/redhat-release
CentOS release 6.3 (Final)
[root@S1-Server logs]# uname -m
x86_64
[root@S1-Server logs]# /application/nginx/sbin/nginx -V
nginx version: nginx/1.6.2
脚本:
[root@S1-Server logs]# cat cut_nginx_log.sh
#!/bin/bash
date=`date +%Y%m%d`
Nginx_Dir=”/application/nginx”
Nginx_Logs=”/root/logs”
[ -d $Nginx_Logs ] && cd $Nginx_Logs ||exit 1
for Log_name in `ls *access*|awk -F . ‘{print $1}’`
do
/bin/mv $Log_name.log ?${Log_name}_${date}.log
done
$Nginx_Dir/sbin/nginx -s reload
执行:
[root@S1-Server logs]# sh cut_nginx_log.sh
查看:
[root@S1-Server logs]# ll
total 40
-rw-r–r–. 1 root root???? 0 Jun? 2 12:46 3k-access.log
-rw-r–r–. 1 root root? 1860 Jun? 2 12:46 3k-access_20150602.log
-rw-r–r–. 1 root root?? 310 Jun? 1 13:58 cut.sh
-rw-r–r–. 1 root root?? 256 Jun? 1 14:50 cut_nginx_log.sh
-rwxr-xr-x. 1 root root 24932 Jun? 1 13:53 rotatelogs
提示:当执行这个脚本之后,它会把日志拷贝一份出来打上时间戳,(用mv实现,那么原来的日志文件就没有了),通过reload nginx会生产一个新的空的日志文件,3k-access.log,即在配置文件中设定的日志
#利用crontab实现每天00:00自动执行日志切割
echo ‘#cut nginx log everyday by teddylu on 2012-12-12’>>/var/spool/cron/root
echo ’00 00 * * * /bin/sh /root/logs/cut_nginx_log.sh >/dev/null 2>&1′ >>/var/spool/cron/root
注意:上面的脚本在轮询的时候,新的日志文件名会有点问题,最后修正为:
[root@S1-Server logs]# cat cut_nginx_log.sh
[codesyntax lang=”php” lines=”no”]
#!/bin/bash date=`date +%Y%m%d` Nginx_Dir="/application/nginx" Nginx_Logs="/root/logs" cd /tmp [ -d $Nginx_Logs ] && cd $Nginx_Logs ||exit 1 #for Log_name in `ls *access*|awk -F . '{print $1}'` ?for Log_name in `ls 3k-access.log` do /bin/mv $Log_name? ${Log_name}_${date}.log done $Nginx_Dir/sbin/nginx -s reload[/codesyntax]
上面的版本有一个问题,就是每天的日志显示的时间比实际的时间要大一天,每天0点切割日志的时候应该,切出来的日志应该是前一天的,所以最后修正为
[codesyntax lang=”text”]
#!/bin/bash #date=`date +%Y%m%d` Nginx_Dir="/application/nginx-1.9.14" Nginx_Logs="/application/nginx-1.9.14/logs" cd /tmp [ -d $Nginx_Logs ] && cd $Nginx_Logs ||exit 1 #for Log_name in `ls *access*|awk -F . '{print $1}'` ?for Log_name in `ls teddylu.info.access.log` do /bin/mv $Log_name? ${Log_name}_$(date -d "yesterday" +"%Y%m%d").log done $Nginx_Dir/sbin/nginx -s reload[/codesyntax]