免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3501 | 回复: 5
打印 上一主题 下一主题

数据文件按天增量备份脚本 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-01-01 09:35 |只看该作者 |倒序浏览
-------------------------------------------------------------------------------
文件:bak_orgcdr.sh
-------------------------------------------------------------------------------
#!/bin/ksh
######################################################
#        数据文件按天增量备份脚本
#        功能:按mtime将前一天的文件copy/link备份目录下,不删除原文件
#        执行频率:每天执行(crontab)
#
######################################################
##########function #############
#date=YYYYMMDD
#Usage:command date days
GetPrevDate(){
        str=$1
        days=$2
        yy=`echo $str|cut -c 1-4`
        mm=`echo $str|cut -c 5-6`
        dd=`echo $str|cut -c 7-8`
        sav_dd=$days
        days=`expr $days - $dd`
        while [ $days -ge 0 ]
        do
        mm=`expr $mm - 1`
        [ $mm -eq 0 ] && mm=12 && yy=`expr $yy - 1`
        aaa=`cal $mm $yy`
        bbb=`echo $aaa|awk '{print $NF}'`
        days=`expr $days - $bbb`
        done
        dd=`expr 0 - $days`
        expr $dd : "^.$" > /dev/null && dd=0$dd
        expr $mm : "^.$" > /dev/null && mm=0$mm
        echo $yy$mm$dd
}
#======================main==================#
todayDate=`date "+%Y%m%d"`
#备份数据源目录
srcPath="/bill/data/pppath/bak/"
#备份目的目录
bakPath="/bill/backup/cdr/${todayDate}/"
#记录处理结果的日志文件目录
logPath="/bill/backup/logpath/cdr/"
#处理日志文件名
logFile="/bill/backup/logpath/cdr/${todayDate}.log"

if [ ! -d $bakPath ]; then
                mkdir $bakPath;
fi
#生成时间戳文件,精确到分
beginDate="`GetPrevDate ${todayDate} 1`0001"
endDate="`GetPrevDate ${todayDate} 2`0001"
#for test
#beginDate="200412260001"
#endDate="200412270001"

touch -t "${beginDate}" /bill/backup/script/beginfile
touch -t "${endDate}" /bill/backup/script/endfile

echo "***********************************************************" >$logFile
echo "The cdr backup process is starting at [ `date` ]" >>$logFile
echo "Backup file's mtime between [ $beginDate - $endDate ) " >>$logFile
echo "SrcPath=/bill/data/pppath/bak/" >>$logFile
echo "BakPath=/bill/backup/cdr/${todayDate}/" >>$logFile
echo "rocess log is written in $logFile " >>$logFile
echo "Backup files list as: " >>$logFile
#在源目录递归查找满足条件的文件,并拷贝到备份目录
#注意:不同目录下如果有同名文件将会丢失数据文件
find $srcPath \( -newer /bill/backup/script/beginfile -a ! -newer /bill/backup/script/endfile \) -depth -print|xargs cpcdr $bakPath $logFile;

echo "Backup cdr completed at [ `date` ]." >>$logFile
#检查处理日志看是否有错误
awk 'BEGIN {cnt=0;} {if($1~/ERROR/) cnt++;} END {if(cnt==0) printf("Backup Successed.\n"; else printf("There is %d ERROR found.Please check it.\n",cnt);}' $logFile >>$logFile
echo "***********************************************************" >>$logFile


PreNDate=`GetPrevDate ${todayDate} 31`
#echo $PreNDate
cd $logPath
#删除31天前的日志文件
while read file ;
do
    if [ -f $file ]; then
            rm -f `echo $file |awk '{if(substr($0,1,<='$PreNDate') print($0)}' `
    fi
done <<!
`ls *.log`
!

-------------------------------------------------------------------------------
文件:cpcdr
-------------------------------------------------------------------------------
#!/bin/ksh
#this file is called by bak_orgcdr.sh
bakpath="$1"
logfile="$2"
shift 2
for x in "$@"
do
        #echo cp $x $bakpath;
        #cp -f $x $bakpath;
        ln -f $x $bakpath`basename $x`
        if [ $? -ne 0 ];then
          echo "ERROR! cp $x $bakpath failed! "   >>$logfile
        else
          echo "cp $x $bakpath successed."  >>$logfile
        fi
done
#取日期的函数版内一个前辈写的
#这个脚本很简单,也许对大家有用

环境:HP-UX B.11.23 U ia64

论坛徽章:
0
2 [报告]
发表于 2005-01-01 10:46 |只看该作者

数据文件按天增量备份脚本

有很多版本的取日期方法。对类似的车轮问题大家最好还是用perl的模块,能更减少开发周期~
此次回复与本帖无关,纯属心血来潮,楼主的程序还是很不错的,有一点要说的,dd是UNIX的一个命令,最好不要用来做变量。

论坛徽章:
0
3 [报告]
发表于 2005-01-01 12:11 |只看该作者

数据文件按天增量备份脚本

取昨天日期:

  1. bash-2.05$ perl -e '($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time-86400);print $year+1900,$mon+1,$mday'
  2. 20041231
复制代码

论坛徽章:
0
4 [报告]
发表于 2005-01-01 17:43 |只看该作者

数据文件按天增量备份脚本

不错
顶一下

论坛徽章:
0
5 [报告]
发表于 2005-01-02 08:53 |只看该作者

数据文件按天增量备份脚本

谢谢各位的回复,我是很不喜欢perl,所以从来不用也不会,我正在翻译Programming in lua有人有兴趣吗?

论坛徽章:
0
6 [报告]
发表于 2008-09-12 10:27 |只看该作者

回复 #5 欧阳不修 的帖子

谢谢分享,找了好久,一会在linux as5.2上测试一下。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP