使用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]