不知道有多少人公司会用svn上线,个人感觉很靠谱,管理起来也很方便,最好配置文件也用svn才最好

下面奉上楼主的svn脚本,以及svn遇到问题解决脚本


#!/bin/bash
###创建日志###
filename=`date '+%Y%m%d_%H%M%S.svnup.log'`
svnversion=''
touch /svnlog/$filename
ip=`cat /tmp/ip.txt|awk -F "." '{print $NF}'`
for i in $ip
do
touch /tmp/shangxianlog/svn.$ip
done
###判断是否重启###
/usr/bin/svn up $svnversion /svnsignal/htdocs 2>&1 | tee -a /svnlog/$filename
restartsignal=`cat /svnlog/$filename | awk '/.jar$|.conf$|classes|lib/' | wc -l`
if [ $restartsignal -gt 0 ]
then

  echo "--------------------------resin restart--------------------------------"  2>&1 | tee -a /tmp/shangxianlog/svn.51
  echo "---------------------------------51------------------------------------"  2>&1 | tee -a /tmp/shangxianlog/svn.51
  ssh 192.168.0.51 "sh /usr/local/resin/bin/resin.sh stop -server youyuan" 2>&1 | tee -a /tmp/shangxianlog/svn.51
  echo "51 stopped" 2>&1 | tee -a /tmp/shangxianlog/svn.51
  sleep 3
  ssh 192.168.0.51 "svn up $svnversion /www/youyuan.com.1/htdocs" 2>&1 | tee -a /tmp/shangxianlog/svn.51
  echo "51 svnup ok " 2>&1 | tee -a /tmp/shangxianlog/svn.51
  sleep 15
  a=`cat /tmp/shangxianlog/svn.51|grep "G"|wc -l`
  if [ "$a" -gt 0 ]; then
               echo "<<<192.168.0.51 discovery G>>>"
               sh /opt/yanchao/jiaoben/shanchuG.sh
               if [ "$?" == 0 ]; then
                       echo G is delete
               fi
  fi
  ssh 192.168.0.51 "sh /usr/local/resin/bin/resin.sh restart -server youyuan" 2>&1 | tee -a /tmp/shangxianlog/svn.51
  sleep 20
  echo "51 restart " 2>&1 | tee -a /tmp/shangxianlog/svn.51

else

 echo "---------------------------------51------------------------------------"  2>&1 | tee -a /tmp/shangxianlog/svn.51
 ssh 192.168.0.51 "svn up $svnversion /www/youyuan.com.1/htdocs" 2>&1 | tee -a /tmp/shangxianlog/svn.51
  o=`cat /tmp/shangxianlog/svn.51|grep "G"|wc -l`
  if [ "$o" -gt 0 ]; then
               echo "<<<192.168.0.51 discovery G>>>"
               sh /opt/yanchao/jiaoben/shanchuG.sh
               if [ "$?" == 0 ]; then
                       echo G is delete
               fi
  fi
 sleep 3
 echo "51 svnupok" 2>&1 | tee -a /tmp/shangxianlog/svn.51

fi


svn上线脚本太长了好几百行,就不全部贴出来,只贴个例子

有很多人会问题了

o=`cat /tmp/shangxianlog/svn.51|grep "G"|wc -l`
  if [ "$o" -gt 0 ]; then
               echo "<<<192.168.0.51 discovery G>>>"
               sh /opt/yanchao/jiaoben/shanchuG.sh
               if [ "$?" == 0 ]; then
                       echo G is delete
               fi
  fi

这段是在干嘛

哈哈 svn上线确实非常方便,但也有弊端,如果手动在某台服务器去更改的话,下次再svn up就会出现传说中的G问题 这个问题可不容小视,出现G代表此文件没有更新,会出问题的,所有楼主决定,写个一旦上线出现G就去那台服务器删除此文件,并重新svn up.说实话这是楼写过的最难的一个脚本之一,语法不难,只是思路不好找,想了一个多小时才有思路,废话不多说奉上连带脚本


#!/bin/bash
read -p "please enter the ip:" IP
c=`echo $IP|awk -F "." '{print $NF}'`
b=`cat /tmp/shangxianlog/svn.$c|awk '/G/{print $NF}'`
#c=`cat /svnlog/$a|egrep -o "(([0-9]{3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}||G))"|grep -B1 G|sed -n '1'p`
#c=`cat /svnlog/$a|egrep -o "((192.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}||G))"|grep -B1 G|grep "192"`
e=`date +%H%M%S`
for i in $b
do
ssh  $IP "cp -f $i /tmp/$e"
if [ "$?" == 0 ]; then
echo ok
ssh  $IP "rm -f $i"
if [ "$?" == 0 ]; then
echo ok
ssh  $IP "svn up /www/youyuan.com.1/htdocs"| tee -a /tmp/$e
fi
fi
done