我很黑! 发表于 2018-8-27 07:02:55

使用shell脚本实现php应用的批量更新

#!/bin/bash  
#
  

  
read -p "请输入项目包路径:" webappPath
  
#压缩项目文件,便于传输
  
webappName=`basename ${webappPath}`
  
webappPackage=/tmp/${webappName}.tar.gz
  

  
#web服务器存放网站的路径以及web服务的用户名,每个服务器的配置需要统一
  
remoteWebappPath=/data/webapps
  
remoteWebUser=apache
  

  
#相应网站的nginx配置文件路径
  
nginxConfPath=/etc/nginx/conf.d/www_aaa_com.conf
  

  
remoteSSHport=2222
  

  
tar -czf ${webappPackage} ${webappPath}&> /dev/null
  
[ $? -ne 0 ] && echo "tarwrong" && exit 1
  

  
#Load Balance服务器列表
  
lbServers=(lb1)
  

  
#Lamp服务器列表
  
lampServers=(lamp1 lamp2)
  

  
#更新过程中发生异常的服务器列表
  
declare -a failureServers
  

  
check()
  
{
  
   if [ $? -ne 0 ]; then
  
       failureServers[${#failureServers[@]}]=$1
  
       continue
  
   fi
  
}
  

  
for lampServer in ${lampServers[@]}; do
  
   scp -P ${remoteSSHport} ${webappPackage} ${lampServer}:/tmp &>/dev/null
  
   check ${lampServer}
  

  
   ssh -p ${remoteSSHport} ${lampServer} tar -xf /tmp/${webappName}.tar.gz-C /data/webapps
  
   check ${lampServer}
  

  
   ssh -p ${remoteSSHport} ${lampServer} chown -R${remoteWebUser}:${remoteWebUser} /data/webapps/${webappName}
  
   check ${lampServer}
  

  
   declare -i flag=0
  
   for lbServer in ${lbServers}; do
  
       ssh -p ${remoteSSHport} ${lbServer} "grep'[^[:space:]].*;.*#${lampServer}\>' $nginxConfPath &> /dev/null"
  
       check ${lampServer}
  

  
       ssh -p ${remoteSSHport} ${lbServer} "sed -i -r 's@([^[:space:]].*);(.*#'"${lampServer}"'\>)@\1 down;\2@'${nginxConfPath}"
  
       check ${lampServer}
  

  
       ssh -p ${remoteSSHport} ${lbServer} "nginx -s reload"
  
       check ${lampServer}
  

  
       let flag+=1
  
   done
  
   [ $flag -ne ${#lbServers[@]} ] && failureServers[${#failureServers[@]}]=${lampServer} && continue
  

  
   sleep 1m
  
   ssh -p ${remoteSSHport} ${lampServer} "rm -f/data/webapps/aaa"
  
   check ${lampServer}
  

  
   ssh -p ${remoteSSHport} ${lampServer} "ln -s/data/webapps/${webappName} /data/webapps/aaa"
  
   check ${lampServer}
  

  
   ssh -p ${remoteSSHport} ${lampServer} "service httpd reload&> /dev/null"
  
   check ${lampServer}
  

  
   flag=0
  
   for lbServer in ${lbServers}; do
  
       ssh -p ${remoteSSHport} ${lbServer} "grep'[^[:space:]].*down;.*#${lampServer}\>' $nginxConfPath &>/dev/null"
  
       check ${lampServer}
  

  
       ssh -p ${remoteSSHport} ${lbServer} "sed -i -r 's@([^[:space:]].*)[[:space:]]down;(.*#'"${lampServer}"'\>)@\1;\2@'${nginxConfPath}"
  
       check ${lampServer}
  

  
       ssh -p ${remoteSSHport} ${lbServer} "nginx -s reload"
  
       check ${lampServer}
  

  
       let flag+=1
  
   done
  
   [ $flag -ne ${#lbServers[@]} ] && failureServers[${#failureServers[@]}]=${lampServer}
  

  
   ssh -p ${remoteSSHport} ${lampServer} "rm -f/tmp/${webappName}.tar.gz"
  

  
done
  

  
rm -f ${webappPackage}
  
echo "任务执行完成"
  

  
if [ ${#failureServers[@]} -gt 0 ]; then
  
   echo
  
   echo "下列服务器未能正常更新,请进一步检查:"
  
   for failureServer in ${failureServers[@]}; do
  
       echo ${failureServer}
  
   done
  
fi


页: [1]
查看完整版本: 使用shell脚本实现php应用的批量更新