在linux中使用shell脚本定时操作,svn up源代码至最新,同时生成phpdoc文档,本例将完成一个实例:
1. 新建一个目录用来存放sh脚本文件(以及用到的log日志):/opt/ci123/www/html/shell/scm/bbs2014
其中的文件说明:
function.sh:包含脚本使用到的一些function;
config.sh:包含脚本中操作的一些环境配置,例如svn账号密码路径、phpdoc存放路径、源代码路径等等;
global.sh:包含对所有引用的包含;
svn.sh:主main执行脚本,包含操作流程;
svn.log:本例中对每次sh执行操作的log日志记录文件(可由sh脚本生成,名字可自定义);
svn_tmp.log:本例中存储最近一次的sh执行操作的log日记记录文件(可由sh脚本生成,名字可自定义);
2. sh脚本代码:
function.sh:
#!/bin/sh
addLog()
{
# $1:内容
# $2:日志路径
echo -e $1 >> $2;
}
setLog()
{
# $1:内容
# $2:日志路径
echo -e $1 > $2;
}
getSvnVersion()
{
# $1:svn本地工作区
# $2:svn用户名
# $3:svn密码
# grep查找过滤 | cut分割 以“:”取第二块 | tr去除 空格
echo `svn info --username=$2 --password=$3 $1 | grep "Revision" | cut -d ":" -f 2 | tr -d " "`; #svn本次版本
}
updateSvn()
{
# $1:svn本地工作区
# $2:svn用户名
# $3:svn密码
echo `svn up --username=$2 --password=$3 $1 | grep "revision"`;
}
setPhpdoc()
{
# $1:本地源代码路径
# $2:phpdoc文档生成路径
echo `phpdoc -d "$1" -t "$2" -ti "$1" -o "HTML:frames:default" | grep "Total Documentation Time"`;
}
getValByKey()
{
# $1:文件路径
# $2:要搜索的键值 key:val
test -f "$1" && tmp=`cat $1 | grep "$2" | cut -d ":" -f 2 | tr -d ""` || tmp="";
echo $tmp;
}
config.sh:
#!/bin/sh
# svn相关设置
g_svn_path="http://svnadmin.xxx";
g_svn_user="name";
g_svn_pwd="pwd";
# 工作目录
g_path="/opt/ci123/www/html/bbs2014";
g_path_work="$g_path/bbs2014"; #源代码根目录
g_path_phpdoc="/opt/ci123/www/html/phpdoc/bbs2014/"; #phpdoc生成文档存放目录
# 临时目录
g_log=`pwd`"/svn.log"; #运行日志
g_log_tmp=`pwd`"/svn_tmp.log";
global.sh:
#!/bin/sh
source config.sh
source function.sh
svn.sh:
source global.sh
now=`date '+%F %T'`;
log="log:$now""\n"; #记录下执行时间
`updateSvn $g_path_work $g_svn_user $g_svn_pwd`;
svn_version_now=`getSvnVersion $g_path_work $g_svn_user $g_svn_pwd`;
log="$log""svn:$svn_version_now""\n"; #记录下执行时的svn版本号
svn_version_tmp=`getValByKey "$g_log_tmp" "svn"`
if [ ! $svn_version_tmp ]; then
svn_version_tmp=0;
fi
if [ "$svn_version_now" -gt "$svn_version_tmp" ]; then
#需要更新phpdoc
log="$log"`setPhpdoc $g_path_work $g_path_phpdoc`"\n";
fi
`setLog "$log" "$g_log_tmp"`;
`addLog "$log" "$g_log"`;
3. 添加crontab定时执行:
## @xwl 2014-07-21 /bbs2014/svn.sh
0 10 * * * (cd /opt/ci123/www/html/shell/scm/bbs2014 ; sh svn.sh)
4. sh执行记录:
执行过后,查看svn_tmp.log(最近一次日志记录):
log:2014-07-31 10:00:01
svn:1305
svn.log(包含所有日志记录):
log:2014-07-22 10:47:05
svn:1305
Total Documentation Time: 5 seconds
log:2014-07-22 10:47:25
svn:1305
....
其中包含的信息有:sh执行时间,执行时源代码svn版本号,phpdoc文档是否生成。