简单脚本实现nginx日志轮询

环境:

[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,即在配置文件中设定的日志

QQ20150602125744

 

#利用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] 

简单脚本实现nginx日志轮询
Scroll to top