重构前的程序:通过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
posted on 2013-12-27 17:35 codestyle 阅读(1180) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述