jboss部署的应用程序是一个war包时,我们如何进行增量替换文件,再重新启动jboss呢,推荐以下脚本,使用jar命令进行war包的一个内容替换。
#!/bin/bash
#created date: 2023.08.09
#created by: zhaoyuanji
#IP:10.10.1.11
# Deployed Path
deploy_path=/jboss/jboss-eap-7/standalone/deployments
gP_war=/jboss/jboss-eap-7/standalone/deployments/gP.war
au_war=/jboss/jboss-eap-7/standalone/deployments/au.war
# Upload path for incremental deploy file
upload_path=/home/itadmin/upload_war #增量包的上传目录,这个增量包本地需要用zip格式压缩,目录结构和生产环境的要保持一致,否则脚本失效。
mkdir -p ${upload_path}
war_count=`find ${upload_path} -name "*.war" |wc -l`
if [[ ${war_count} -eq 0 ]];then
echo "The upload path has no files,please upload deploy file to ${upload_path}."
exit 1
fi
service_name=$1
# Deploy function
function deploy_service(){
cd ${upload_path}
# unzip source war
unzip ${service_name}.war -d ${service_name}_unpacked
if [[ $? -eq 0 ]];then
echo "***********************************************************"
echo "Step1:${service_name}-*.war has been unpacked successfully."
echo "**********************************************************"
else
echo "Unpacked failed."
exit 1
fi
cd ${service_name}_unpacked
target_war="${service_name}"_war
# Backup
cp ${!target_war} ~/${service_name}_`date +%Y%m%d%H%M%S`.war
# Replace target war
jar -uvf ${!target_war} *
if [[ $? -eq 0 ]];then
echo "**************************************************"
echo "Step2:${target_war} has been updated successfully."
echo "**************************************************"
else
echo "Update war failed."
exit 1
fi
# Check file list
echo "*****************************************************"
for filepath in `find . -type f`
do
filename=`basename ${filepath}`
unzip -l ${!target_war} |grep ${filename} |awk '{print $4,$2,$3}'
done
echo "*****************************************************"
}
# Check the result for deploy.
if [ -z "${service_name}" ];then
echo "Usage:$0 [gP|au]"
exit 1
else
if [ "${service_name}" = "gP" ] || [ "${service_name}" = "au" ];then
deploy_service ${service_name}
cd ${upload_path} && rm -rf *
# Kill the process of jboss
ps -ef | grep "\bstandalone\b" | cut -c 9-15 | xargs kill -9
# Start jboss service.
cd ${deploy_path} && rm -f ${service_name}.war.deployed
cd /jboss/jboss-eap-7/bin
nohup ./standalone.sh &
time=0
while true;do
COUNT=`echo status |nc -z -w 2 10.10.1.11 8080| grep -c succeeded`
if [ ${time} -gt 300 ];then
echo -e "\n**********************************************************"
echo -e "Timed out for 5 minutes to deploy service!"
echo -e "**********************************************************\n"
exit 1
fi
sleep 1
if [ "$COUNT" -eq 1 ];then
if [ -f ${deploy_path}/${service_name}.war.deployed ];then
echo -e "\n**********************************************************"
echo -e "The ${service_name} service has been deployed successfully!."
echo -e "**********************************************************\n"
break
else
echo "The ${service_name} service is deploying........"
let time++
fi
else
echo "Connect 8080 refused,waiting for jboss to start."
let time++
fi
done
else
echo "Usage:$0 [gP|au],please check the service name."
fi
fi
最后修改时间:2024-06-13 15:39:39
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




