# 使用本脚本的前置条件:
# 1. 切到root用户
# 2. web_install.sh脚本、web_config.properties配置文件、tomcat安装包、jdk安装包和webapp安装包在同一目录下
# 配置文件名称,其内容形式为:key=value
confDir="web_config.properties"
# 应用war包名称
appWarName="xxx-web.war"
# tomcat安装包名称
tomcatPackageName="apache-tomcat*"
# jdk安装包名称
jdkPackageName="*jdk*"
# 该脚本所在目录
baseDir=`pwd`
# tomcat用户名
uname="tomcatuser"
# tomcat用户软件安装位置
softwareDir="/home/"${uname}"/software"
# jdk安装位置(软链)
jdkDir=${softwareDir}"/java"
# tomcat安装位置(软链)
tomcatDir=${softwareDir}"/tomcat"
# web应用名称
webappName="xxx"
# web应用放置目录
webappDir=${tomcatDir}"/webapps/"${webappName}
# web应用的日志目录
webappLogsDir=${tomcatDir}"/webapps/webapplogs"
# 以下是待修改的配置文件名称
conf_prop=${webappDir}"/WEB-INF/classes/conf.properties"
function create_tomcatuser(){
#1、创建tomcat用户
echo "==== 创建${uname}用户开始 ===="
#创建组
gid=`id -g ${uname} &>/dev/null`
if [ $? -eq 0 ] ; then
echo "用户组:${uname}已存在"
else
echo "用户组:${uname}不存在,即将创建"
groupadd -g 210 ${uname}
fi
#创建用户
uid=`id -u ${uname} &>/dev/null`
if [ $? -eq 0 ] ; then
echo "用户:${uname}已存在"
else
echo "用户:${uname}不存在,即将创建"
useradd -u 210 -g 210 ${uname}
fi
# 创建tomcatuser的软件安装目录
if [ -d ${softwareDir} ];then
rm -rf ${softwareDir}
fi
mkdir -p ${softwareDir}
chown -R ${uname}:${uname} ${softwareDir}
echo "==== 创建${uname}用户结束 ===="
}
#校验及配置java环境变量
checkExistJava(){
echo "检查java环境变量配置开始"
#JAVA_HOME配置
jdk_javahome=$(grep -n "export JAVA_HOME=.*" /home/${uname}/.bashrc | cut -f1 -d':')
if [ -n "$jdk_javahome" ];then
echo "JAVA_HOME已经配置,删除重新配置"
# PATH配置中也会包含JAVA_HOME,一并删除
sed -i '/JAVA_HOME/d' /home/${uname}/.bashrc
fi
sed -i '$a export JAVA_HOME='${jdkDir} /home/${uname}/.bashrc
sed -i '$a export PATH=$JAVA_HOME/bin:$PATH' /home/${uname}/.bashrc
echo "检查java环境变量配置结束"
}
#安装jdk及环境配置
install_jdk()
{
echo "==== 安装jdk开始 ===="
if [ -d ${jdkDir} ];then
echo "jdk软链已存在,尝试删除..."
rm -rf ${jdkDir}
fi
# 判断jdk安装包是否存在
num=`echo $(find ${baseDir} -maxdepth 1 -name ${jdkPackageName}) | wc -l | awk '{print $1}'`
if [ ${num} -eq 1 ];then
# 只查询当前目录下是否有jdk安装包,不递归查询
jdkPackageDir=`echo $(find ${baseDir} -maxdepth 1 -name ${jdkPackageName})`
else
echo "jdk安装包不存在或有2个以上,请检查后再重试..."
exit 3
fi
tar -zxf ${jdkPackageDir} -C ${softwareDir}
# jdk解压后的目录
jdkUnpackedDir=`ls -d ${softwareDir}/*jdk*`
ln -snf ${jdkUnpackedDir} ${jdkDir}
# jdk安装目录的权限赋给tomcat用户
chown -R ${uname}:${uname} ${softwareDir}
checkExistJava
#配置生效并且验证java版本
su - ${uname} -c 'source ~/.bashrc'
echo "配置版本信息如下:"
su - ${uname} -c 'java -version'
if [ $? -eq 0 ]; then
echo 'jdk配置完成'
else
echo '安装失败,请重新尝试或手动安装'
exit 3
fi
echo "==== 安装jdk结束 ===="
}
install_project(){
echo "==== 安装web应用开始 ===="
num=`echo $(find ${baseDir} -maxdepth 1 -name ${appWarName}) | wc -l | awk '{print $1}'`
if [ ${num} -eq 1 ];then
if [ -d ${webappLogsDir} ];then
echo "web应用的日志目录已存在,尝试删除..."
rm -rf ${webappLogsDir}
fi
if [ -d ${webappDir} ];then
echo "web应用所在目录已存在,尝试删除..."
rm -rf ${webappDir}
fi
mkdir -p ${webappDir}
mkdir -p ${webappLogsDir}
# web应用安装包全路径名
webappPackageDir=`echo $(find ${baseDir} -maxdepth 1 -name ${appWarName})`
# 解压
unzip ${webappPackageDir} -d ${webappDir} &> /dev/null
else
echo "web应用的安装包不存在,请检查后再重试..."
exit 5
fi
echo "==== 修改配置文件开始 ===="
lines=`wc -l ${confDir} | awk '{print $1'}`
while(($lines>0))
do
line=`sed -n ${lines}"p" ${confDir}`
lineLen=`echo ${line} | wc -L`
# 处理非空行
if [ ${lineLen} -gt 0 ];then
# 处理非注释行
if [ ${line:0:2} != "#" ];then
# 配置项
config=`echo ${line%%=*}`
# 值
# value=`echo ${line#*=}`
fi
# 整行替换其他配置
# 第一种方式,替换某个关键字所在行(该关键字中有可能带特殊字符/)
sed -i "s!^${config}=.*!${line}!" ${conf_prop}
# 第二种方式,替换某个关键字所在行(该关键字中不带特殊字符/)
# sed -i "/var dataCloud/c var dataCloud = '"${value}"';" ${xxx_properties}
# 第三种方式,替换某个关键字所在行的下一行
# line=`grep -n "case 'production'" ${xxx_properties} | awk '{print $1}'`
# newline=${line%*:}
# sed -i "$[newline+1]c authUrl = '"${value}"/authStatus';" ${xxx_properties}
fi
fi
let "lines--"
done
echo "==== 修改配置文件结束 ===="
# 从tomcat用户家目录下的software目录开始赋权
chown -R ${uname}:${uname} ${softwareDir}
echo "==== 安装web应用结束 ===="
}
install_tomcat(){
# 安装tomcat
echo "==== 安装tomcat开始 ===="
if [ -d ${tomcatDir} ];then
echo "tomcat软链已存在,尝试删除..."
rm -rf ${tomcatDir}
fi
num2=`echo $(find ${baseDir} -maxdepth 1 -name ${tomcatPackageName}) | wc -l | awk '{print $1}'`
if [ ${num2} -eq 1 ];then
# tomcat安装包全路径名
tomcatPackageDir=`echo $(find ${baseDir} -maxdepth 1 -name ${tomcatPackageName})`
# 解压到${softwareDir}目录下
tar -zxf ${tomcatPackageDir} -C ${softwareDir}
# tomcat解压后的目录
tomcatUnpackedDir=$(ls -d ${softwareDir}/*tomcat*)
# 创建软链
ln -snf ${tomcatUnpackedDir} ${tomcatDir}
echo "==== 安装tomcat结束 ===="
else
echo "无法找到tomcat安装包或者tomcat安装包个数过多"
exit 4
fi
# 给tomcat安装目录赋权
chown -R ${uname}:${uname} ${softwareDir}
chmod -R 775 ${tomcatDir}
}
function start_tomcat(){
echo "开始杀死多余的tomcat进程..."
suspects=`ps -ef | grep ${tomcatDir} | awk '{print $ 2}' | wc -l`
# -gt表示>,此处>1,是因为grep ${tomcatDir}命令也会有一个pid # grep -v 可以踢出自身那个pid
if [ ${suspects} -gt 1 ];then
num=${suspects}-1
while(($num>0))
do
curPid=`ps -ef | grep ${tomcatDir} | awk '{print $ 2}' | head -n 1`
echo "当前tomcat进程为${curPid},即将被杀死..."
kill -9 ${curPid}
let "num--"
done
fi
#启动tomcat # 不需要
echo "开始启动tomcat..."
su - ${uname} -c "cd ${tomcatDir}/bin && sh startup.sh"
}
# 创建tomcatuser用户
create_tomcatuser
# 安装jdk
install_jdk
# 安装tomcat
install_tomcat
# 部署代码包
install_project
# 启动tomcat
start_tomcat
shell脚本一键安装tomcat应用
最新推荐文章于 2025-02-21 13:31:46 发布