首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > CVS SVN >

对SVN更新脚本持续改进并增加定时任务

2013-09-05 
对SVN更新脚本继续改进并增加定时任务对之前的svn更新脚本继续改进,内容包括当无法连接SVN服务器时的处理,

对SVN更新脚本继续改进并增加定时任务
对之前的svn更新脚本继续改进,内容包括当无法连接SVN服务器时的处理,以及增加定时任务。
svn更新脚本改进之后代码如下:

#!/bin/shrevision=`svn info |grep "Last Changed Rev:" |awk '{print $4}'`echo "the revision is $revision"URL=`svn info |grep URL: |awk '{print $2}'`echo "the url is $URL"svnRevision=`svn info $URL |grep "Last Changed Rev:" |awk '{print $4}'`echo "the revision in svn is $svnRevision"if [[ $revision < $svnRevision ]] ; then    echo -e "\033[0;31;40m need svn up \033[0m"    svn up    echo "svn up finish"    exit 1elif [[ "$svnRevision" = "" ]]; then    echo -e "\033[0;35;40m get svn revision info fail \033[0m"    exit -1else    echo -e "\033[0;38;40m no need svn up \033[0m"    exit 0fi


调用svn脚本进行更新的脚本,改进包括当无法连接上svn服务器时的处理,以及增加定时任务,和获取当前时间的值的写法的改进(之前通过sed和awk对date输出的结果进行整理,现在改用date +参数的方式获取)。
由于是在其他地方调用该脚本,所以该脚本运行后需要进入脚本所在的目录,获取脚本所在的目录共有下面几种方法:
echo $(cd "$(dirname "$0")"; pwd) #得到的是绝对路径echo ${0%/*} #得到的是相对路径,不过如果是在脚本所在目录运行该脚本,貌似得到的是运行的程序echo $(dirname `readlink -f "$0"`) #得到的是绝对路径

改进后的调用svn脚本进行更新的脚本,代码如下:
#!/bin/bashcd "$(dirname "$0")"ROOT=`pwd`LOGDIR=$ROOT/logsvnif [ ! -d "$LOGDIR" ]; then    mkdir $LOGDIRfiFILENAME=$LOGDIR/$(date +%m%d%H%M%S).logfunction svnUp(){    echo "check $1" |tee -a $FILENAME    cd $ROOT/$1    ./svnUpCheck.sh >> $FILENAME    rtnvalue=$?    if [[ $rtnvalue = 1 ]]; then         echo -e "\033[0;31;40m svn up `pwd`\033[0m"     elif [[ $rtnvalue = 0 ]]; then        echo -e "\033[0;38;40m equal revision, skip `pwd`\033[0m"    elif [[ $rtnvalue = -1 ]]; then        echo -e "\033[0;35;40m can't get revision, skip `pwd`\033[0m"    elif [[ $rtnvalue = 255 ]]; then        echo -e "\033[0;35;40m unable to connect, error code: $rtnvalue \033[0m"    else        echo -e "\033[0;33;40m other error, error code: $rtnvalue \033[0m"    fi          revision=`svn info |grep "Last Changed Rev:" |awk '{print $4}'`    changedate=`svn info |grep "Last Changed Date:" |awk '{print $4 "\x20" $5}'`    echo "$revision $changedate" >> $FILENAME    date >> $FILENAME    echo >> $FILENAME}svnUp kernel/android/JBsvnUp kernel/linuxsvnUp kernel/systemsvnUp common_magellansvnUp image_file_creatorsvnUp systemsvnUp SQA_DailyBuild/AV_FWsvnUp SQA_DailyBuild/bootcode


最后说下linux定时任务。
linux定时任务可以通过cron来实现。像我这里用的ubuntu默认是开启该服务的,启动或关闭该服务的命令如下:
  /sbin/service crond start //启动服务  /sbin/service crond stop //关闭服务  /sbin/service crond restart //重启服务  /sbin/service crond reload //重新载入配置

如果该服务默认不启动,而想要在开机的时候启动的话,可以在/etc/rc.d/rc.local这个脚本的末尾加上:
  /sbin/service crond start

通过crontab  -e 可以编辑crontab服务文件来添加定时任务,编辑的是/var/spool/cron下对应用户的cron文件,也可以直接修改/etc/crontab文件。
具体格式如下:
      Minute Hour Day Month Dayofweek   command
      分钟     小时   天     月       天每星期       命令
     每个字段代表的含义如下:
     Minute             每个小时的第几分钟执行该任务
     Hour               每天的第几个小时执行该任务
     Day                 每月的第几天执行该任务
     Month             每年的第几个月执行该任务
     DayOfWeek     每周的第几天执行该任务
     Command       指定要执行的程序
     在这些字段里,除了“Command”是每次都必须指定的字段以外,其它字段皆为可选。
我在这里,则是在最后加上以下代码:
0 9,12,15,18,21 * * * ~/branch/workspace/checkAllSVNUp.sh0 0 * * * ~/konka/makeimage.sh

表示每个月每一周的每一天,在9至21点,每三小时执行一次~/branch/workspace/checkAllSVNUp.sh,在0时0分执行 ~/konka/makeimage.sh脚本。

参考文章:Linux下cron的使用:http://fanqiang.chinaunix.net/system/linux/2005-06-13/3306.shtml
linux定时任务的设置:http://www.blogjava.net/freeman1984/archive/2010/09/23/332715.html

热点排行