!/bin/bash
#### http://kinggoo.com
#### 需要安装sendmail mutt以便发送邮件通知,当然也可以改下代码,弄成网页访问形式也可以
TIME=`date +%Y%m%d`
SVNROOT=/opt/svnroot
SVNDATA=/back/svndata
SVNURL="http://URL/svn"
TOMAIL=admin@kinggoo.com
#针对配置http集成svn服务来做,如果你没有将http添加到服务。脚本内是通过http服务生效后返回显示信息OK来判断是否启动的!
HTTP=/etc/init.d
declare -a REPOSITORY
REPOSITORY=( Vancl Vjia )
ARR=0
echo "" > ${SVNDATA}/log/svn.mail > /dev/null
while [ "${ARR}" -lt "${#REPOSITORY[@]}" ]
do
if [ ! -e ${SVNDATA}/log ] || [ ! -d ${SVNDATA}/log ];then
mkdir -p ${SVNDATA}/log
fi
if [ ! -e ${SVNDATA}/${REPOSITORY[$ARR]} ] || [ ! -d ${SVNDATA}/${REPOSITORY[$ARR]} ];then
mkdir -p ${SVNDATA}/${REPOSITORY[$ARR]}
fi
BUILD=`svnlook youngest ${SVNROOT}/${REPOSITORY[$ARR]}` && sleep 2
BUILD_TEMP=`cat ${SVNDATA}/log/${REPOSITORY[$ARR]}.version`
if [ ! -e ${SVNDATA}/log/${REPOSITORY[$ARR]}.version ] && [ -z ${BUILD_TEMP} ];then
echo "0" > ${SVNDATA}/log/${REPOSITORY[$ARR]}.version
VANCL_BUILD=`cat ${SVNDATA}/log/${REPOSITORY[$ARR]}.version`
else
#因为reversion 每次增量备份要比上一次的大一
VANCL_BUILD=`cat ${SVNDATA}/log/${REPOSITORY[$ARR]}.version|wc -l`
fi
${HTTP}/httpd stop |grep -i OK && I=$?
sleep 5
if [ "${I}" -eq "0" ];then
echo "httpd is stopping" >> ${SVNDATA}/log/svn.mail
else
/usr/bin/pgrep httpd|xargs kill -9
echo "httpd is kill for stopping" >> ${SVNDATA}/log/svn.mail
fi
BUILD=500
svnadmin dump ${SVNROOT}/${REPOSITORY[$ARR]} -r ${VANCL_BUILD}:${BUILD} --incremental > ${SVNDATA}/${REPOSITORY[$ARR]}/${REPOSITORY[$ARR]}.${VANCL_BUILD}_${BUILD}.dump.${TIME} 2> ${SVNDATA}/log/${REPOSITORY[$ARR]}.version && sleep 30 && ${HTTP}/httpd start |grep -i OK && I=$? && echo "`ls -l ${SVNDATA}/${REPOSITORY[$ARR]}/${REPOSITORY[$ARR]}.${VANCL_BUILD}_${BUILD}.dump.${TIME}`" >> ${SVNDATA}/log/svn.mail &&
if [ "${I}" -eq "0" ];then
echo "httpd is running" >> ${SVNDATA}/log/svn.mail
else
echo "httpd is failed" >> ${SVNDATA}/log/svn.mail
${HTTP}/httpd restart |grep -i OK && I=$?
echo "$I" >> ${SVNDATA}/log/svn.mail
fi
((ARR=$ARR+1))
unset VANCL_BUILD BUILD BUILD_TEMP
done
echo "`cat ${SVNDATA}/log/svn.mail`" |mutt -s "${TIME}" ${TOMAIL}