java环境部署+tomcat部署通过脚本实现自动化安装

不知道别人是怎么想,我反正比较讨厌安装部署java,这个东西难倒是不难,可要操心啊,命令一条条的打,麻烦。基于此,写一个脚本,从下载java到安装java,下载tomcat,到安装tomcat,并把tomcat作为一个服务启动部署好,这些工作希望全部由脚本来实现。

java和tomcat的版本都是基于centos7 64位系统,别的操作系统脚本不支持。

首先,需要确定脚本的功能,脚本功能如下:

1,判断脚本所在的操作系统类型,如果为centos7 64位系统,继续运行脚本,否则提示脚本无法运行。

2,自动下载java和tomcat,java使用版本固定为jdk-8u271-linux-x64.tar.gz(本地安装,需要提前从官网下载),如果本地有jdk-8u271-linux-x64.tar.gz这个版本,那么立刻本地安装jdk-8u271,如果没有,从网络下载​jdk-8u20-linux-x64.tar.gz 这个版本,安装jdk-8u20这个版本tomcat版本固定为apache-tomcat-9.0.38.tar.gz.

3,自动判断java环境是否存在,如果存在,脚本不安装java。

4,自动判断下载工具wget是否存在,如果存在,不yum安装,如果不存在立刻安装。

5,根据java和tomcat都是二进制安装包的特点,安装路径固定,都为 /usr/local/目录,分别为  /usr/local/java 和 /usr/local/tomcat.

6,考虑到可能会有意想不到的情况导致脚本失败,但环境变量脚本已添加,设置脚本只添加一次唯一的关于java和tomcat的脚本。

7,tomcat自身比较小巧,只有启动停止等脚本,将这些脚本加入centos7的systemd服务内,使得启动停止等功能更为仁杏化。


脚本结构的简单说明:

该脚本结构比较简单,也有很多改进空间,但所有功能可以实现,其中有一个比较特殊的bug,基本不影响整体运行。

(有人可以发现这个bug吗???)

全部变量全局声明,简化期间,变量名并未规范,仅以字母取代。

全部采用函数调用,以实现模块化的灵活控制脚本运行。

由于是java 版本并没确定,因此环境变量的配置和systemctl管理是针对两个jdk写了两套,因此,脚本比较臃肿。有优化空间。

启动tomcat的命令为 :

systemctl enable tomcat && systemctl start tomcat

查看tomcat服务状态命令为:

systemctl status tomcat


欢迎试用该脚本!!!


下面直接上源码:

#!/bin/bash
#!author zsk_john
a=`rpm -qa | grep wget |wc -l`
b=`find / -name jar |wc -l`
c=`find / -name jdk-8u271-linux-x64.tar.gz | wc -l`
d=`find / -name jdk-8u20-linux-x64.tar.gz | wc -l`
e=`find / -name catalina.sh | wc -l`
f="/usr/local/jdk1.8.0_20"
g="/usr/local/jdk1.8.0_271"
h=`cat /etc/os-release | grep ^PRETTY |awk -F= '{print $2}'`
#***************************************
#********判断wget是否安装,如果没有安装**
#********立刻安装************************
#************************************
#***********************************
function os_check_version() {
if ( echo ${h} |grep -q "CentOS Linux 7 (Core)" );then
echo "your os is centos7,will go on run this shell!!!"
else
echo "your os is not centos7,shell will be cancle!!!"
exit 1
fi
}
function install_java(){
if [ $c -ne 0 ];then
echo "jdk8u271 will be installed!!!"
tar -zxf `find / -name jdk-8u271-linux-x64.tar.gz` -C /usr/local/
echo "jdk-8u271 is success installed"
else
echo "cound not find jdk-8u271, will install jdk-8u20"
wget -O /usr/local/src/jdk.tar.gz http://dl.mycat.org.cn/jdk-8u20-linux-x64.tar.gz
tar -zxf `find / -name jdk.tar.gz` -C /usr/local/
echo "jdk-8u20-linux-x64 is install success!!!"
echo "java is install~~~~~~~"
fi
}
function install_tomcat() {
wget -O /usr/local/src/tomcat.tar.gz https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.38/bin/apache-tomcat-9.0.38.tar.gz
tar -zxf `find / -name tomcat.tar.gz` -C /usr/local/
mv /usr/local/apache-tomcat-9.0.38 /usr/local/tomcat
}
function jdk_1_8_0_20_env() {
echo "JAVA_HOME=/usr/local/jdk1.8.0_20
TOMCAT_HOME=/usr/local/tomcat
PATH=.\$PATH:\$JAVA_HOME/bin:\$TOMCAT_HOME/bin
CATALINA_HOME=/usr/local/tomcat
CATALINA_BASE=$CATALINA_HOME
CATALINA_PID=$CATALINA_BASE/bin/tomcat.pid
CLASSPATH=\$JAVA_HOME/jre/lib/ext:\$JAVA_HOME/lib/tools.jar
export CLASSPATH PATH JAVA_HOME CATALINA_HOME CATALINA_BASE CATALINA_PID">>/etc/profile
source /etc/profile
}
function jdk_1_8_0_271_env() {
echo "JAVA_HOME=/usr/local/jdk1.8.0_271
TOMCAT_HOME=/usr/local/tomcat
PATH=.\$PATH:\$JAVA_HOME/bin:\$TOMCAT_HOME/bin
CATALINA_HOME=/usr/local/tomcat
CATALINA_BASE=$CATALINA_HOME
CATALINA_PID=$CATALINA_BASE/bin/tomcat.pid
CLASSPATH=\$JAVA_HOME/jre/lib/ext:\$JAVA_HOME/lib/tools.jar
export CLASSPATH PATH JAVA_HOME CATALINA_HOME CATALINA_BASE CATALINA_PID">>/etc/profile
source /etc/profile
}
function jdk_20_systemd() {
>/usr/lib/systemd/system/tomcat.service
cat >>/usr/lib/systemd/system/tomcat.service<<EOF
[Unit]
Description=web server tomcat
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
Environment="JAVA_HOME=/usr/local/jdk1.8.0_20/"
PIDFile="/usr/local/tomcat/bin/tomcat.pid"
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
}
function jdk_271_systemd() {
>/usr/lib/systemd/system/tomcat.service
cat >>/usr/lib/systemd/system/tomcat.service<<EOF
[Unit]
Description=web server tomcat
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
Environment="JAVA_HOME=/usr/local/jdk1.8.0_271/"
PIDFile="/usr/local/tomcat/bin/tomcat.pid"
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
}
#===================================================
if [ $a -eq 0 ];then
echo "wget is not install,now ,begin install wget"
yum install wget -y -q
else
echo "wget is already installed"
fi
#====================================================
os_check_version
#====================================================
if [ $b -eq 0 ];then
echo "java is not in your system,will be install java"
echo " begin install java"
install_java
else
echo "java is already installed!!~~"
fi
#=====================================================
if [ $e -ne 0 ];then
echo "tomcat is already installed!!!~~"
else
install_tomcat
fi
#=================================================
if [ -d $f ];then
sed -i '/^JAVA_HOME/,$d' /etc/profile
jdk_1_8_0_20_env
jdk_20_systemd
else
echo "jdk_1.8.0.20 is not installed"
fi
#===============================================
if [ -d $g ];then
sed -i '/^JAVA_HOME/,$d' /etc/profile
jdk_1_8_0_271_env
jdk_271_systemd
else
echo "jdk_1.8.0.271 is not installed"
fi
#************************************
#***********************************