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

对之前的svn更新脚本继续改进,内容包括当无法连接SVN服务器时的处理,以及增加定时任务。
svn更新脚本改进之后代码如下:
#!/bin/sh
revision=`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 1
elif [[ "$svnRevision" = "" ]]; then
    echo -e "\033[0;35;40m get svn revision info fail \033[0m"
    exit -1
else
    echo -e "\033[0;38;40m no need svn up \033[0m"
    exit 0
fi


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


改进后的调用svn脚本进行更新的脚本,代码如下:
#!/bin/bash
cd "$(dirname "$0")"
ROOT=`pwd`
LOGDIR=$ROOT/logsvn
if [ ! -d "$LOGDIR" ]; then
    mkdir $LOGDIR
fi
FILENAME=$LOGDIR/$(date +%m%d%H%M%S).log

function 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/JB
svnUp kernel/linux
svnUp kernel/system
svnUp common_magellan
svnUp image_file_creator
svnUp system
svnUp SQA_DailyBuild/AV_FW
svnUp 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.sh
0 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

你可能感兴趣的:(linux,crontab,shell,SVN,定时任务)