重构前的程序:通过rsync命令抓取日志文件

基本概况:

我有一台服务器每天每个小时都会生成一个日志文件,这些日志文件会被保留2天,超过2天会被一个程序压缩放到备份目录,日志文件的文件名是有命名要求的,例如:project_log.20130101.01, project_log.20130101.02 意思即:2013年1月1日1点和2点生成的日志文件,他们被备份后的文件名是:project_log.20130101.01.gz, project_log.20130101.02.gz

另外有一台服务器可从这台服务器上抓取文件,它即可以抓取昨天生成的尚未备份的日志,也可以抓取比较早的已经被备份的数据,还可以抓取当天已经生成了的日志文件

#!/bin/sh

echo "$0 start at `date +"%F %k:%M:%S"`" 1>&2

export RSYNC_PASSWORD="abcabc"

if [ $# -eq 0 ] 
then
        # 没有参数 统计日期取一天之前的日期
        log_date=`date -d"1 day ago" +'%Y%m%d'`
else
        # 有参数 统计日期取参数指定日期
        log_date=`date -d"$1" +'%Y%m%d'`
fi

dir=`dirname $0`

# 在当前目录下的logs/project/创建目录名是统计日期的目录
mkdir -p $dir/logs/project/$log_date
log_path="$dir/logs/project/$log_date"

err="$dir/tmp/rsync_log_err"

# 获得程序运行时的服务器日期
now_date=`date  +'%Y%m%d'`

if [ $log_date -lt $now_date ]
then
        # 统计日期小于现在的日期 即不输入参数走的路径
        for i in `seq -w 00 23`
        do
                echo $i 1>&2
                :>$err
                rsync -Cavz log@172.18.11.200::logs/syslog/project_log.$log_date.$i $log_path/project_log.$log_date.$i 2>$err

                fname="$log_path/project_log.$log_date.$i"

                if [ -s $err ] && [ ! -s  $fname ];then # 尝试抓取备份文件1
                        rsync -Cavz log@172.18.11.200::disk1/project_log.$log_date.$i.gz $log_path/project_log.$log_date.$i.gz 2>$err

                        cat $err
                        if [ -s $err ];then
                                echo "The file $fname.gz of server is not found"
                        fi
                fi
        done
else
        # 统计日期 大于等于现在的日期 即通过命令行输入了日期,但是大于等于程序运行时的服务器日期
        
        now_hour=`date -d "1 hour ago" +"%Y%m%d.%H"` # 取得当前日期之前一个小时时间

        echo $i 1>&2 #实在不理解

        :>$err #据说是清空文件

        echo $now_hour #你这是闹那样,因为定义后没有被使用啊

        # 抓取命令 ,注意$i没有定义,so:这是个bug啊
        rsync -Cavz log@172.18.11.200::logs/syslog/project_log.$log_date.$i $log_path/project_log.$log_date.$i >$err

        fname="$log_path/project_log.$log_date.$i"

        if [ -s $err ] && [ ! -s  $fname ];then # 尝试抓取备份文件2
                rsync -Cavz log@172.18.11.200::disk1/history/project_log.$log_date.$i.gz $log_path/project_log.$log_date.$i.gz >$err

                if [ -s $err ];then
                                echo "The file $fname.gz of server is not found"
                fi
        fi
fi

echo "$0 end at `date +"%F %k:%M:%S"`" 1>&2

我觉得这里的主要问题在于有明显的两段代码重复了,并且程序里还有一些BUG

转载于:https://www.cnblogs.com/code-style/p/3494568.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值