centos7 实现单台服务器部署Tomcat多实例(脚本)

要求:

1、检测服务器是否部署JDK和Tomcat;
2、部署Tomcat实例至/usr/local/目录;
3、SHELL脚本支持单个Tomcat实例添加并启动;
4、SHELL脚本支持多个Tomcat实例添加并启动;
5、支持删除实例

内容

#!/bin/bash
#auto install tomcat sl
#auth by toyix
#202071613: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 "|awk '{print "'${SHOW_SERVER_PORT_DIR}'" "         " $1" " $2}'`>>show.txt 
                cat ${SHOW_SERVER_PORT_DIR}conf/server.xml |grep "|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

执行脚本-添加多实例

centos7 实现单台服务器部署Tomcat多实例(脚本)_第1张图片

执行脚本-删除实例

centos7 实现单台服务器部署Tomcat多实例(脚本)_第2张图片

注:

这里可以加个判断,如果没有安装tomcat,则无需删除实例
---------------------------------end

你可能感兴趣的:(SHELL(脚本),tomcat)