nginx日志路径|nginx日志定时切割脚本的一些例子

更新时间:2019-06-11    来源:nginx    手机版     字体:

【www.bbyears.com--nginx】

每天自动nginx日志切割脚本

 代码如下

[bash]
#!/bin/bash

#先把日期赋值到变量,因为是在第二天0点后执行,所以日期应该获取前一天的,如20120903
todaydate=`date –date=’yesterday’ "+%Y%m%d"`

#把网站的子目录日志枚举一下
for site in `ls -l /home/log/ | grep -v "^d" |awk ‘{print $NF}’`

#移动昨天的日志到新的位置,重命名中增加日期标识
do
mv /home/log/$site /home/logbak/$site-$todaydate
done

#找到nginx的master进程,向它发USR1指令,让它往新的日志文件写入,如果不加这条命令的话,仍会往刚重命名的日志中写入
kill -USR1 `ps aux | grep nginx | grep master | awk ‘{print $2}’`[/bash]


每7天对日志进行一下切割


说明:每隔7天执行一次,使用crontab自动运行脚本,请根据自己的需要修改代码中的111cn.net

 代码如下

#!/bin/bash

#Nginx 日志路径
logs_path="/home/wwwlogs/"

mkdir -p ${logs_path}$(date -d -7day +"%Y")/$(date -d -7day +"%m")/
mv ${logs_path}111cn.net.access.log ${logs_path}$(date -d -7day +"%Y")/$(date -d -7day +"%m")/domain.com.access_$(date -d -7day  +"%Y%m%d").log

kill -USR1 `cat /usr/local/webserver/nginx/logs/nginx.pid`

再看一个计划任务

 代码如下

#nginx日志切割脚本
#!/bin/bash
#设置日志文件存放目录
logs_path="/usr/local/nginx/logs/"
#设置pid文件
pid_path="/usr/local/nginx/nginx.pid"
#重命名日志文件
mv ${logs_path}access.log ${logs_path}access_$(date -d "yesterday" +"%Y%m%d").log
#向nginx主进程发信号重新打开日志
kill -USR1 `cat ${pid_path}`

保存以上脚本nginx_log.sh,并设置定时切割任务

三、定时工作

在crontab中设置作业


0 0 * * * bash /usr/local/nginx/nginx_log.sh


支持多个域名的日志文件


以根据需要改变成自己喜欢的日志保存格式,我这里的日志保存方式是:按照年月来创建文件夹,每日日志文件添加年月日的后缀形式,比如:/var/log/2013/11/letuknowit_20131110.log

 代码如下

#!/bin/bash

# 日志文件保存的位置
logs_path="/alidata/log/nginx/access/"

# 需要切割的日志文件名,多个文件用空格隔开
logs_name=(xxx)

mkdir -p ${logs_path}$(date -d "yesterday" +"%Y/%m")
num=${#logs_name[@]}
for((i=0;i         echo ${logs_path}$(date -d "yesterday" +"%Y/%m")/${logs_name[i]}_$(date -d "yesterday" +"%Y%m%d").log
done

kill -USR1 `cat /alidata/server/nginx/logs/nginx.pid`

上面的xxx换成自己的日志文件名,如果有多个日志文件,用空格隔开,比如主站的日志文件为letu.log,二级域名的日志文件为blog.log,则logs_name如下:

 代码如下

logs_name=(letu blog)

日志名一般在nginx的配置文件中进行设置,如下面的设置

 代码如下


log_format  letu  "$remote_addr - $remote_user [$time_local] "$request" "
                      "$status $body_bytes_sent "$http_referer" "
                      ""$http_user_agent" "$http_x_forwarded_for"";
access_log  /alidata/log/nginx/access/letu.log letu;

本文来源:http://www.bbyears.com/caozuoxitong/54172.html