在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文檔是否生成。