要求:
1、检测服务器是否部署JDK和Tomcat;
2、部署Tomcat实例至/usr/local/目录;
3、SHELL脚本支持单个Tomcat实例添加并启动;
4、SHELL脚本支持多个Tomcat实例添加并启动;
5、支持删除实例
内容
#!/bin/bash
#auto install tomcat sl
#auth by toyix
#2020年7月16日 13:49:40
#################################
SERVER_XML_YES_NO=`find /usr/local/ -name server.xml|sed -E '/server.xml$/p' -n`
DATE=`date +%Y%m%d%H%M%S`
echo -e "\033[32m ....................................................... \033[0m"
echo -e "\033[32m 检查机器中是否有tomcat,没有则安装... \033[0m"
echo -e "\033[32m ....................................................... \033[0m"
yum install -y wget lrzsz vim
#检测是否为root用户
if [ $UID -ne 0 ];then
echo -e "\033[33m 请登录root用户来执行此脚本 \033[0m"
exit 1
fi
#检测是否有epel源,没有则安装使用阿里epel源
yum repolist |grep -i epel >/dev/null
if [ $? -ne 0 ];then
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all >/dev/null
yum makecache >/dev/null
fi
#检测是否安装有jdk
java --version
while [ $? -ne 0 ]
do
echo -e "\033[32m 未检测到jdk,现在开始安装。。。 \033[0m"
yum install -y java-11-openjdk.x86_64
java --version
done
#检测是否安装有tomcat,没有则安装
if [ -z "${SERVER_XML_YES_NO}" ];then
echo -e "\033[32m 没有安装tomcat,现在开始安装tomcat... \033[0m"
wget -c https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.36/bin/apache-tomcat-9.0.36.tar.gz
tar -zxvf apache-tomcat-9.0.36.tar.gz
mv apache-tomcat-9.0.36 /usr/local/tomcat
sh /usr/local/tomcat/bin/startup.sh
firewall-cmd --zone=public --list-ports |grep "8080/tcp"
if [ $? -ne 0 ];then
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --reload
fi
TOMCAT_DIR="/usr/local/tomcat/"
echo -e "\033[32m $TOMCAT_DIR \033[0m"
else
TOMCAT_DIR=`find /usr/local/ -name server.xml|sed -E '/server.xml$/p' -n|sed '1p' -n|awk -F"conf" '{print $1}'`
# echo $TOMCAT_DIR
echo -e "\033[32m ........................................................... \033[0m"
echo -e "\033[32m .......已检测到本机的tomcat,请直接进行添加删除操作......... \033[0m"
echo -e "\033[32m ........................................................... \033[0m"
fi
#备份主配置文件server.xml
\cp ${TOMCAT_DIR}conf/server.xml ${TOMCAT_DIR}conf/serverBAK${DATE}.xml
#将主配置文件中的注释删除
cat ${TOMCAT_DIR}conf/serverBAK${DATE}.xml|grep -v '^$'|grep -E -v '<!--.*-->'|sed '/<!--/,/-->/d' >${TOMCAT_DIR}conf/server.xml
#查看现有实例、管理端口及通讯端口对应信息
SHOW_SERVER_PORT () {
echo -e "\033[32m 现有实例、管理端口及通讯端口对应信息 \033[0m"
sed -i '1,$d' show.txt >/dev/null 2>&1
for SHOW_SERVER_PORT_DIR in `find /usr/local/ -name server.xml |awk -F"conf" '{print $1}'`
do
echo -ne `cat ${SHOW_SERVER_PORT_DIR}conf/server.xml |grep "<Server port=" |awk '{print "'${SHOW_SERVER_PORT_DIR}'" " " $1" " $2}'`>>show.txt
cat ${SHOW_SERVER_PORT_DIR}conf/server.xml |grep "<Connector port=" |awk '{print " " $1 " " $2}'>>show.txt
done
cat -n show.txt
}
#将现有实例名保存在show.txt中,以被调用
SHOW_TOMCAT_NAME () {
echo -e "\033[32m 现有实例 \033[0m"
sed -i '1,$d' show.txt >/dev/null 2>&1
for SHOW_TOMCAT_NAME_DIR in `find /usr/local/ -name server.xml |awk -F"conf" '{print $1}'`
do
echo ${SHOW_TOMCAT_NAME_DIR} >>show.txt
done
}
#函数 -> 添加实例名之不能为空
ADD_TOMCAT_NAME () {
#调用函数,查看实例、管理端口及通讯端口对应信息
SHOW_SERVER_PORT
echo -----------------------------------------------------------------------------------
read -p "请输入单个或多个tomcat实例名,注:不用加上路径: " ADD_TOMCAT_NAMES
while [ -z "${ADD_TOMCAT_NAMES}" ]
do
read -p "请重新输入单个或多个tomcat实例名,注:不用加上路径: " ADD_TOMCAT_NAMES
done
}
#函数 ->检查实例名是否存存,存在则重新输入
TOMCAT_NAME_BE () {
for ADD_TOMCAT_NAME in $ADD_TOMCAT_NAMES
do
#检查实例名是否重复,如果重复请重新输入
cat show.txt |grep -w ${ADD_TOMCAT_NAME}
while [ $? -eq 0 ]
do
echo -e "\033[33m 请看前一行,实例名${ADD_TOMCAT_NAME}已存在,请有计划的添加!! \033[0m"
#ADD_TOMCAT_NAME
#cat show.txt |grep -w ${ADD_TOMCAT_NAME}
exit 1
done
done
}
PS3="添加实例请选1,删除请按2, 请选择: "
select ADD_DEL in ADD_TOMCAT DEL_TOMCAT
do
break
done
echo $ADD_DEL
if [ $ADD_DEL == "ADD_TOMCAT" ];then
#添加实例名操作
ADD_TOMCAT_NAME #调用函数,创建实例名
TOMCAT_NAME_BE #调用函数,检查实例名
for ADD_TOMCAT_NAME in $ADD_TOMCAT_NAMES
do
read -p "请输入新实例${ADD_TOMCAT_NAME}对应的 管理端口server port: " NEW_ADD_SERVERPORT
read -p "请输入新实例${ADD_TOMCAT_NAME}对应的 通讯端口connector port: " NEW_ADD_CONNECTPORT
cat show.txt |grep -E -w "${NEW_ADD_SERVERPORT}|${NEW_ADD_CONNECTPORT}"
if [ $? -eq 0 ];then
echo -e "\033[33m ${NEW_ADD_SERVERPORT}已被占用,跳过 添加实例${ADD_TOMCAT_NAME} \033[0m"
exit 1
else
\cp -a ${TOMCAT_DIR} /usr/local/${ADD_TOMCAT_NAME}
sed -i 's/Server port=".*"/Server port="'${NEW_ADD_SERVERPORT}'" shutdown="SHUTDOWN"/' /usr/local/${ADD_TOMCAT_NAME}/conf/server.xml
sed -i 's/Connector port=".*"/Connector port="'${NEW_ADD_CONNECTPORT}'" protocol="HTTP\/1.1"/' /usr/local/${ADD_TOMCAT_NAME}/conf/server.xml
#cat -n /usr/local/${ADD_TOMCAT_NAME}/conf/server.xml
echo -e "\033[32m 启动新实例${ADD_TOMCAT_NAME} \033[0m"
/usr/local/${ADD_TOMCAT_NAME}/bin/startup.sh
#检查服务是否被启动
ps -ef|grep tomcat|grep bbs
if [ $? -ne 0 ];then
echo -e "\033[33m 实例添加成功,然启动失败,请进入/usr/local${ADD_TOMCAT_NAME}目录下检查 \033[0m"
fi
fi
done
SHOW_SERVER_PORT
else
#删除实例操作
SHOW_TOMCAT_NAME #调用查看所有实例函数,此行不打印具体实例,目的是为了把实例放入show.txt中,以供下成代码使用
#选择要删除的实例
PS3="以上为本机所有TOMCAT实例,删除将不可恢复,请选择: "
select DEL_TOMCAT_NAME in `cat show.txt`
do
break
done
#停止对应实例服务
echo -e "\033[32m 停止${DEL_TOMCAT_NAME}服务!! \033[0m"
ps -ef|grep tomcat|grep "${DEL_TOMCAT_NAME}"|grep -v grep|awk '{print $2}'|xargs kill -9 >/dev/null 2>&1
rm -rf ${DEL_TOMCAT_NAME}
echo -e "\033[32m 实例${DEL_TOMCAT_NAME}删除成功!! \033[0m"
SHOW_TOMCAT_NAME
cat -n show.txt
fi
执行脚本-添加多实例
执行脚本-删除实例
注:
这里可以加个判断,如果没有安装tomcat,则无需删除实例
---------------------------------end