当前位置: > Linux服务器 > nginx >

Lnmp下Nginx日志自动切割脚本

时间:2017-08-05 22:40来源:linux.it.net.cn 作者:IT
该脚本会自动切割/home/wwwlogs/目录下所有的log文件

#!/bin/bash

#自动版日志切割 无需设置

#set the path to nginx log files
log_files_path="/home/wwwlogs/"
log_files_dir=${log_files_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")

#set the path to nginx.
nginx_sbin="/usr/local/nginx/sbin/nginx"
#Set how long you want to save
save_days=30

############################################
#Please do not modify the following script #
############################################
mkdir -p $log_files_dir

cd $log_files_path
#cut nginx log files
for d in `ls -f *.log`;do
mv ${log_files_path}${d} ${log_files_dir}/$(date -d "yesterday" +"%Y%m%d")_$d
done

#delete 30 days ago nginx log files
find $log_files_path -mtime +$save_days -exec rm -rf {} \;

$nginx_sbin -s reload


按天分类存储并删除超过7天的日志

脚本内容:

#!/bin/bash
# a nginx access log segmentation shell script
cd /data/wslogs
log_dir="/data/wslogs"
time=`date +%Y%m%d`
nginx_dir="/usr/local/webserver/nginx"

#日志分割,按天分类
website=`ls $log_dir/access* | xargs -n 1 | cut -f 2 -d "."`
for i in $website
do
  mkdir -p $log_dir/backup/$time/$i
  mv $log_dir/access.$i.log $log_dir/backup/$time/$i/$time.log
done
$nginx_dir/sbin/nginx -s reload

#删除所有超过7天日志。
if [ "`date +%a`" = "Sun" ]; then
  all_list=`ls $log_dir/backup | xargs -n 1`
  for del in $all_list
  do
    let results=$time-$del
    if [ $results -gt 7 ]; then
      rm -fr $log_dir/backup/$del
    fi
  done
fi
需要注意的是:因为个人需要,Nginx访问日志命名格式必须是access.域名.log,例如:access.www_1987_com.log,域名中原来的点.必须换成其他字符,比如下划线_

代码中的一些位置参数可以根据自己需要修改,修改/etc/crontab文件,加入00 00 * * * root /data/logcron.sh,每天零点执行。

方法三,我们可以不用脚本可以使用简单的配置

1. 定义日志轮滚策略

# vim nginx-log-rotate

view sourceprint?
/data/weblogs/*.log {
    nocompress
    daily
    copytruncate
    create
    notifempty
    rotate 7
    olddir /data/weblogs/old_log
    missingok
    dateext
    postrotate
        /bin/kill -HUP `cat /var/run/nginx.pid 2> /dev/null` 2> /dev/null || true
    endscript
}
[warning]/data/weblogs/*.log使用通配符时,/data/weblogs/目录下的所有匹配到的日志文件都将切割。如果要切割特定日志文件,就指定到该文件。[/warning]

2. 设置计划任务

# vim /etc/crontab

59 23 * * * root ( /usr/sbin/logrotate -f /PATH/TO/nginx-log-rotate)
这样每天23点59分钟执行日志切割。



(责任编辑:IT)
------分隔线----------------------------
栏目列表
推荐内容