nginx产生的log自动切割,过期自动删除

nginx产生的log自动切割,过期自动删除

需求

背景:遇到一个需求:因为nginx每天会产生大量的log,所以需要对这些文件按照每天的日期保存,一段时间后删除年代久远的log.现在成熟的方案是:使用阿里云的ossfs存储桶,将过期的log先转移到存储桶中,超过30天就删除存储桶中的过期log

实现

crontab

crontab -e

在crontab中添加定时执行的脚本文件

59 23 * * * /bin/sh /usr/local/nginxLog.sh

在每天23:59执行该脚本

实现脚本nginxLog.sh

#!/bin/bash

log_dir="/var/log"
move_dir="/nginxLog"
nginx_pid=`ps -ef | grep nginx|grep master|awk -F " " '{print $2}'`
nginx_dir=`ls -l /proc/$nginx_pid/exe |awk -F ">" '{print $2}'`
date_str=`date +%Y%m%d`
move_day=3
save_day=30
dealFile=(`ls $log_dir|grep -E 'access.log|error.log'|awk -F '.log' '{print $1}'`)
inner_ip=$(/sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:")

cd $log_dir

#按日期移动文件
file_count=${#dealFile[@]}
for((i=0;i<file_count;i++))
do
    file_name=${dealFile[i]}
    mv $log_dir/${file_name}.log  $log_dir/${file_name}-${date_str}.log
done

$nginx_dir -s reopen


#移动三天后的文件到nginxLog目录
for((i=0;i<file_count;i++))
do
    file_name=${dealFile[i]}

    find $log_dir -mtime +$move_day -type f -name "*${file_name}-*"| awk -F "/log/" '{print $2}' >> nginx_log_mv.log
done

for move_log_file in $(cat nginx_log_mv.log)
do
        mv $log_dir/$move_log_file $log_dir/${inner_ip}-${move_log_file}
        mv $log_dir/${inner_ip}-${move_log_file} $move_dir
done
rm -rf nginx_log_mv.log
#删除过期的文件
for((i=0;i<file_count;i++))
do
    file_name=${dealFile[i]}

    find $move_dir -mtime +$save_day -type f -name "*${file_name}-*" >> ${move_dir}/rm.log
    find $move_dir -mtime +$save_day -type f -name "*${file_name}-*" | xargs rm -f
done

说明:

nginx_dir:获取nginx的启动路径,采用动态的方式获取ngnix的执行路径,是脚本更加的通用

dealFile:利用grep和awk获取带有access.log和error.log关键字的文件名,并分割去掉文件中的后缀.log,将其存入到数组dealFile中

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值