对之前的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