Back

利用Cron自动更新代码

2016-03-20 更新

利用cront自动更新代码

原因:公司使用SVN存储代码,经常看代码之前忘记更新。遂想办法,让代码定时自动更新。

定时更新,首先想到的就是使用crontab+svn up

但是由于代码比较多,而且处于不同目录或者自己更改了目录结构,且SVN无法进行递归,除非每个代码目录都写一个cron,但是,在crontab调用SVN命令时,无法获得授权。必须指定userpwd。感觉放在crontab中不太合适。

于是重新写了个脚本。用来定时更新(svn_up.sh):

#!/bin/bash
#递归调用函数:更新当前目录
function up_path(){
    #判断当前是否有.svn目录,若有更新当前目录
    if [ -d "$1/.svn" ]; then
      #crontab需要指定账号密码,-no-auth-cache即不要保存用户信息
      svn up --username username --password password --no-auth-cache $1;
      echo "--------------------------------"
    else
      #获取绝对路径,排除当前目录(以/结尾),排除包含/.的目录(不是代码,如/.svn)
      #find /codepath/ -maxdepth 1 | grep -v "[\/]$" | grep -v "\/\."
      dir_list=$(find $1 -maxdepth 1 | grep -v "[\/]$" | grep -v "\/\.")
      for i in $dir_list; do
        if [ $1 = $i ]; then
          continue
        elif [ -d $i ]; then
          #若当前目录不是svn目录,则递归更新
          up_path $i;
        fi
      done
    fi
}
#使用参数调用
up_path $1;

crontab调用如下:

#周一到周五,10点到20点,每30分钟调用一次。代码目录作为参数
*/30 10-20 * * 1-5 sh svn_up.sh /codepath/ &> /tmp/test.log