分发上传war包,并且部署至weblogic

系统环境

WebLogic Server Version: 10.3.0.0
OS:linux

分发上传脚本,并且调用远程重新启动weblogic脚本

上代码:

#!/bin/bash
##deploy.sh
#upload war file to remote server
echo input params: $*
remote_name=(server1 server2 server3)

declare -A remote_array
declare -A war_array

remote_array=([server1]="10.193.78.31" [server2]="10.193.78.34" [server3]="10.193.78.35")
war_array=([server1]="payweb meradmin" [server2]="userCenter merchants payment" [server3]="directLine inmanage")


function usage()
{
  echo "==================================================================================="
  echo "Usage:deploy.sh"
  echo -e "\t-d : [1 2 3 a] \e[1;31m required.\e[0m desc: exec remote shell cmd for redeploy weblogic "
  echo -e "\t\t////////////////////////////////////////////////////////"
  echo -e "\t\t\e[1;31m1 :server1 ; 2: server2 ; 3 :server3 ; a :all server \e[0m"
  for i in `eval echo {0..$((${#remote_name[*]}-1))}`
  do
    echo -e "\t\t${remote_name[i]}:${remote_array["${remote_name[i]}"]}"
  done

  echo -e "\t\t///////////////////////////////////////////////////////"
  echo -e "\t-r : \e[1;31m not required.\e[0m desc:remove war file,default is don't remove war file"

  echo "**********************************************"
  echo -e "example: ./deploy.sh -rd \"1 2 3\""
  echo -e "\tdesc: exec server1,server2,server3 shell cmd."
  echo "**********************************************"
  echo -e "example: ./deploy.sh -rd \"a\""
  echo -e "\tdesc: exec all server shell cmd."
  echo "**********************************************"
  echo -e "example: ./deploy.sh -d \"a\""
  echo -e "\tdesc: don\'t remove war file."
  echo "**********************************************"

  echo "===================================================================================="
  exit 1
}

d="a"
r="n"

while getopts "d:r" opt
do
  case $opt in
  d)
    d=$OPTARG;;
  r)
    r="y";;
  ?)
    usage ;;
  esac

done

if [ "$d"x = "a"x ];then
  d="1 2 3"
fi

war_base_dir="/apps/wars/"
remote_user="root"
remote_war_dir="/apps/besp/"
remote_shell_cmd="/root/redeployUAT.sh"

#upload war files to remote server
for i in `eval echo {0..$((${#remote_name[*]}-1))}`
do
   ip="${remote_array["${remote_name[i]}"]}"

   echo "***********************************************************"
   echo "start server $ip"

   for war in  ${war_array["${remote_name[i]}"]}
   do
     war_file="$war_base_dir$war.war"
     if [ -f "$war_file" ]; then
       echo "$war_file is exist,start upload to $ip:$remote_war_dir"
       echo scp $war_file $remote_user@$ip:$remote_war_dir
       scp $war_file $remote_user@$ip:$remote_war_dir

       if [ "$r"x = "y"x ]; then
          echo "remove $war_file"
          rm -rf $war_file
       fi
     else
       echo $war_file is not exist, skip
     fi
   done

   #exec remote server weblogic shell
   if [[ $d =~ $((${i}+1)) ]];then 
     echo "====================================================================="
     echo "exec ssh -t  $remote_user@$ip \"$remote_shell_cmd\"" 
     ssh -t  $remote_user@$ip "$remote_shell_cmd"
     echo "====================================================================="
   fi
echo "end server $ip"
echo "***********************************************************"
done


#!/bin/sh
####redeployUAT.sh  此脚本需要放到31,34,35 各台服务器的/root 目录下,并赋予 可执行权限
###重启不同的weblogic 服务
dirArray=("userCenter" "merchants" "payment")
serverArray=("UserServer" "MerServer" "paymentServer")
now=`date "+%Y%m%d%H"`
echo current date is $now
weblogicServerBaseDir="/home/weblogic/bea/user_projects/domains/base_domain/servers/"
weblogicBinBaseDir="/home/weblogic/bea/user_projects/domains/base_domain/bin/"
warBaseDir="/apps/besp/"

backupDir="/apps/besp/backup/"

#if backupdir not exist create it

if [ ! -d "$backupDir" ] ; then
  echo "$backupDir"not exist, create it...
  mkdir "$backupDir"
else 
   echo "$backupDir"exist, continue...
fi

for i in "${!dirArray[@]}"; do
    #printf "%s\t%s\n" "$i" "${dirArray[$i]}"
    #start for loop
    cd $warBaseDir
    dir="${dirArray[$i]}"
    server="${serverArray[$i]}"
   
    #tar directory
    tar -zcf "$backupDir/$dir$now".tar.gz $dir
    #delete directory
    echo delete directory $dir...
    rm -rf $dir
    #unzip new package

    #unzip -o $dir.war -d $dir -p
    unzip -q -o -d $dir $dir.war
    echo kill $server process...
    kill -9 `ps -ef|grep $server |grep -v grep|awk '{print $2}'`
    #change work diretory to weblogic servers
    echo change dir to "$weblogicServerBaseDir$server"
    cd "$weblogicServerBaseDir$server"
    echo remove "$server" cache
    rm -rf logs
    rm -rf tmp
    rm -rf cache
    rm -rf stage
    echo change dir to "$weblogicBinBaseDir"
    cd $weblogicBinBaseDir
    rm -rf $dir.out
    sleep 2s
    if [ "x"`ps -ef|grep $server |grep -v grep|awk '{print $2}'` == "x" ]; then
        echo "$server has been stoped successfully."
            echo start weblogic "$server"
            # AdminServer use startWebLogic.sh
            #otherServer usr startManagedWebLogic.sh
            if [  "x$server" == "xAdminServer" ];then
              nohup ./startWebLogic.sh > $dir.out 2>&1 &
            else
              nohup ./startManagedWebLogic.sh $server> $dir.out 2>&1 &
            fi

            while true
            do
              result=`cat $weblogicBinBaseDir$dir.out |grep "RUNNING mode"`
              result="${result:0-14:7}"
              if [[ "$result"x == "RUNNING"x ]]; then
                  echo -e "\n\033[32;40;7mstart weblogic $server success..\033[0m\n"
                  break
              else
                 sleep 1s
                 result=`cat $weblogicBinBaseDir$dir.out |grep FORCE_SHUTTING_DOWN`
                 result="${result:0-20:19}"
                 if [[ "$result"x == "FORCE_SHUTTING_DOWN"x ]]; then
                    echo -e "\033[31;43;7mweblogic $server start failed. please check $dir.out.\033[0m"
                    break;
                 fi
                 echo -e ".\c"
                 continue
              fi
            done
            echo ""
            #tail -f $dir.out
    else
       echo "$server stop failed retry"
       kill -9 `ps -ef|grep $server |grep -v grep|awk '{print $2}'`
       sleep 2s
    fi
    #end for loop
done


echo -e "\n\033[32;40;7mAll server start end.Please check the weblogic console.\033[0m"

代码已经上传至oschina git ,地址:https://git.oschina.net/ly1022/linuxShellDeployScript.git

posted @ 2016-02-25 14:35  啸月狼烟  阅读(700)  评论(0)    收藏  举报