开发人员学Linux(3):CentOS7中安装JDK8和Tomcat8

本系列不是为Linux运维人员准备的,而是主要为开发人员准备的,包括但不限于:
但愿了解Linux的开发人员;
须要在Linux上部署一些组件的开发人员,如Memcached/Nginx/Redis等;
须要使用一些在Linux上部署运行效果可能会更好的效果的系统,如Jetkins、SVN、JavaMelody等。
但愿了解一些当前较热的技术,想在虚拟机里搭建个环境把玩一番的,如.Net Core/Hadoop等。
所以在本系列文章中不会去讲Linux及各个分支的历史,也不会去讲Linux与Windows相比的优缺点,更不会讲Linux Shell如何编程,涉及到这些知识也会较快带过,本系列文章主要是讲如何在虚拟机快速搭建起一个可运行和观察效果的环境。
1.前言
书接前两回,前面已经讲了如何安装配置免费开源的虚拟机软件VirtualBox以及如何在VirtualBox中安装并配置CentOS7。在本篇将讲述如何在CentOS7中安装JDK和Tomcat,为从此的须要,本篇将介绍如何安装Oracle JDK8和Tomcat8。html

2.软件准备
本篇采用tar.gz安装,固然也能够采用rpm方式安装或yum方式安装,至于后两种安装方式感兴趣的请自行查阅相关文章。
JDK文件:jdk-8u131-linux-x64.tar.gz
官方下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
Tomcat文件:apache-tomcat-8.5.15.tar.gz
官方下载地址:http://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.5.15/bin/apache-tomcat-8.5.15.tar.gz
或:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
注意:由于在前两篇文章中都是以CentOS7 x64来介绍的,因此这里下载的压缩包也都是x64的。
3.安装Oracle JDK
3.1卸载OpenJDK
采用前面的方式安装CentOS7时,默认安装了OpenJDK1.8的,OpenJDK其实就是也是在Java规范上的另外一种实现,就如同Mono也是按照微软的.NET规范实现的同样,在一个平台上编译后的文件能够直接在另外一个平台上运行,反正几年前我就干过在Windows上用Microsoft Visual Studio编写ASP.NET程序而后放在Linux系统上借助Apache+Mono+xsp运行。
由于后面还有更多内容依赖于Java,因此这里就卸载OpenJDK而安装Oracle JDK了。
检查当前系统是否安装JDK,运行命令:java

rpm -qa | grep jdk


获得结果以下:linux

java-1.8.0-openjdk-headless-1.8.0.131-2.b11.el7_3.x86_64
java-1.8.0-openjdk-1.8.0.131-2.b11.el7_3.x86_64
copy-jdk-configs-1.2-1.el7.noarch


卸载OpenJDK,运行命令:shell

yum remove java-1.8.0-openjdk-1.8.0.131-2.b11.el7_3.x86_64
yum remove java-1.8.0-openjdk-headless-1.8.0.131-2.b11.el7_3.x86_64

此时若是再运行rpm -qa | grep jdk就会看到java-1.8.0-openjdk-1.8.0.131-2.b11.el7_3.x86_64被卸载了。apache

3.2安装Oracle JDK
按照本文提供的地址将jdk-8u131-linux-x64.tar.gz下载到宿主机,而后借助SSH客户端软件SSHSecureShellClient上传到/root目录。
解压文件到/usr/local目录:编程

cd /root
tar –zxf /root/jdk-8u131-linux-x64.tar.gz –C  /usr/local


解压后会在/usr/local目录下多出一个jdk1.8.0_131文件夹来。
注意:/usr/local/ jdk1.8.0_131这个目录在设置JDK环境变量时会用到。vim

下面就须要配置环境变量了,告诉系统Java的相关信息,如安装路径、类库路径等。这里有两种配置方式:一种是为指定用户配置,一种是为全部用户配置,若是只为某个用户配置那么只需在该用户目录下的.bashrc文件中设置便可,若是须要给全部用户设置,那么就须要在/etc/profile中设置,这里以全局设置为例,打开/etc/profile文件在最后添加以下内容:tomcat

export JAVA_HOME=/usr/local/jdk1.8.0_131
export JRE_HOME=/usr/local/jdk1.8.0_131
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin

而后使配置生效,执行以下命令:bash

source /etc/profile

如今能够检查Java环境变量是否配置正确了,经过java –version命令,在本人机器上获得以下输出:微信

[root@localhost ~]# java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)

至此,Oracle JDK已正确安装。

4.安装Tomcat8
按照本文提供的地址将apache-tomcat-8.5.15.tar.gz下载至本地宿主机(注:也可在能访问互联网的虚拟机上直接用wget下载到虚拟机上),而后借助SSH客户端软件SSHSecureShellClient上传到/root目录。

解压文件到/usr/local目录:

tar –zxf /root/apache-tomcat-8.5.15.tar.gz –C /usr/local


解压后会在usr/local目录下多出一个apache-tomcat-8.5.15文件夹来。
注意:/usr/local/ apache-tomcat-8.5.15这个目录在设置Tomcat环境变量时会用到。固然,也能够不设置Tomcat相关的环境变量,使用相关脚本对Tomcat进行操做时会自动检测这些环境变量。
至此,Tomcat已经安装完成。
经过以下命令启动Tomcat:

/usr/local/ apache-tomcat-8.5.15/bin/startup.sh


若是要关闭Tomcat也很简单,执行以下命令:

/usr/local/ apache-tomcat-8.5.15/bin/stop.sh


注意:使用/usr/local/apache-tomcat-8.5.15/bin/catalina.sh加上参数也能够启动或者中止Tomcat,如 /usr/local/ apache-tomcat-8.5.15/bin/catalina.sh start来启动Tomcat,/usr/local/ apache-tomcat-8.5.15/bin/catalina.sh stop来中止Tomcat,除此以外还可使用debug/run/configtest/version参数,不过没有restart参数来重启Tomcat。

能够在虚拟机打开http://localhost:8080观看那个属性的Tomcat起始页了,在宿主机中则要以虚拟机的IP地址来访问了(前提是虚拟机至少有一个网卡是桥接模式),在本人机器上虚拟机有个网卡是桥接的,IP地址为:192.168.60.198,与宿主机在一个网段,所以能够以http://192.168.60.198:8080来查看了,以下图所示:

注意:若是能够经过ssh链接虚拟机但不能打开http://192.168.60.198:8080,那么颇有多是防火墙问题,执行以下命令关闭防火墙:

systemctl disable firewalld


重启后便可访问。

5.在CentOS7为Tomcat添加服务(使用systemd来操做Tomcat)
为了能让Tomcat可以随CentOS7启动,其实就是可以经过systemctl start/stop/restart来控制Tomcat。在网上有很多在CentOS7之前版本中的例子,都是经过在/etc/rc.d/init.d或/etc/init.d目录中添加脚原本实现的,在CentOS7中提供了另一种方式,使用systemd来替代了service,具体就是在/usr/lib/systemd/system或/etc/systemd/system/目录添加控制命令,Systemd约定,服务的Unit文件需放置在 /etc/systemd/system 或  /usr/lib/systemd/system 目录中,一般将其放在/etc/systemd/system目录中。
5.1Systemctl用法
在CentOS7中有关系统服务的命令有:
systemctl list-units(等同于systemctl):列出激活的服务
systemctl --failed:列出运行失败的服务
systemctl daemon-reload:扫描新的或有变更的服务
systemctl status A.serivice:查看A这个服务的启动信息(注意在运行时须要将A这个名称改成具体的service的名字,下同,如SSH服务对应的sshd.service),这个命令在启动服务失败时查看缘由很是有用
systemctl enable A.service:设置A这个service随系统一块儿启动
systemctl disable A.service:禁止A这个service随系统一块儿启动
systemctl start A.service:启动A这个service
systemctl stop A.service:中止A这个service
systemctl restart A.service:从新启动A这个service
注意:在实际操做中,上述命令中A.service可简化为A,如systemctl enable A.service可简化为systemctl enable A。

5.2给Tomcat增长启动参数
前面的讲述了如何安装Oracle JDK8和Tomcat8.5,并展现了使用Tomcat安装位置下的bin目录中的startup.sh/stop.sh或catalina.sh start/catalina.sh stop来启动或者关闭Tomcat。但在实际开发中咱们仍是但愿Tomcat可以在系统启动的时候自动启动,而不是手工经过命令行来启动,下面就讲述如何将Tomcat添加到CentOS7的启动服务中。
首先咱们记住如下三点:
1.Oracle JDK8安装目录:/usr/local/jdk1.8.0_131
2.Tomcat8安装目录:/usr/local/apache-tomcat-8.5.15
3.而且在/etc/profile中配置了Java相关的环境变量:
export JAVA_HOME=/usr/local/jdk1.8.0_131
export JRE_HOME=/usr/local/jdk1.8.0_131
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin首先须要在Tomcat的安装目录下的bin目录下增长setenv.sh文件,能够经过vim /usr/local/ apache-tomcat-8.5.15/bin/setenv.sh来建立文件,并将以下内容粘贴进去后保存:

#set JAVA_HOME and JRE_HOME and CATALINA_HOME and CATALINA_BASE
export JAVA_HOME=/usr/local/jdk1.8.0_131
export JRE_HOME=/usr/local/jdk1.8.0_131/jre
export CATALINA_HOME=/usr/local/apache-tomcat-8.5.15
export CATALINA_BASE=/usr/local/apache-tomcat-8.5.15
#set JAVA_HOME and JRE_HOME and CATALINA_HOME and CATALINA_BASE

#add tomcat pid
CATALINA_PID="$CATALINA_BASE/tomcat.pid"
#add Java opts
JAVA_OPTS="-server -XX:PermSize=256M -XX:MaxPermSize=1024m -Xms512M -Xmx1024M -XX:MaxNewSize=256m"


也就是设置JAVA_HOME /JRE_HOME/CATALINA_HOME/CATALINA_BASE/CATALINA_PID五个环境变量。
注意:
1.刚刚创建的setenv.sh文件会在经过执行catalina.sh来启动Tomcat时被自动调用。
2.由于在Linux中存在着交互式shell和非交互式shell,交互式shell顾名思义就是在与用户的交互过程当中执行的shell,一般是经过SSH登陆到Linux系统以后输入shell脚本或命令等待用户输入或者确认而后执行的shell,而非交互式shell则是无需用户干预的shell,如一些service的启动等。交互式shell从/etc/profile中读取全部用户的环境变量设置,非交互式shell则从/etc/bashrc中读取全部用户的环境变量设置。所以可能会出如今交互式环境下执行shell脚本没有问题,在非交互式环境下执行shell脚本则会出现找不到环境变量配置信息的问题。
3.另外由于配置了tomcat.pid文件,因此在启动Tomcat时会在Tomcat根目录自动生成tomcat.pid文件,中止Tomcat以后tomcat.pid文件会自动被删除。使用tomcat.pid能够作到防止屡次执行catalina.sh或startup.sh启动Tomcat时会启动多个实例的情形。5.3建立tomcat.service文件
接着增长tomcat.service文件,能够经过vim /usr/lib/systemd/system/tomcat.service来建立文件并下如下内容粘贴进去,而后保存:

[Unit]
Description=Apache Tomcat 8.5.15
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/usr/local/apache-tomcat-8.5.15/tomcat.pid
ExecStart=/usr/local/apache-tomcat-8.5.15/bin/startup.sh
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target
chmod 755 /usr/lib/systemd/system/tomcat.service


别忘了给这个文件增长执行权限:

而后能够执行以下命令来检验是否配置正确:
systemctl enable tomcat.service:设置tomcat这个service随系统一块儿启动
systemctl disable tomcat.service:禁止tomcat这个service随系统一块儿启动
systemctl start tomcat.service:启动tomcat这个service
systemctl stop tomcat.service:中止tomcat这个service
systemctl restart tomcat.service:从新启动tomcat这个service

5.4service文件结构说明
上面讲述的tomcat.service文件包含[unit]、[service]、[install]三部分,其中:
5.4.1[unit]
Unit部分描述服务的基本信息和启动顺序,在本实例中规定了在network启动以后执行,unit部分可包含以下内容:
Description : 服务的简单描述
Documentation : 服务文档
Before、After:定义启动顺序。Before=xxx.service,表明本服务在xxx.service启动以前启动。After=xxx.service,表明本服务在xxx.service以后启动。
Requires:这个单元启动了,它须要的单元也会被启动;它须要的单元被中止了,这个单元也中止了。
Wants:推荐使用。这个单元启动了,它须要的单元也会被启动;它须要的单元被中止了,对本单元没有影响。
5.4.2[service]
在这部分咱们配置tomcat服务的pid,服务的启动,中止,重启命令,service部分可包含以下内容:
Type=simple(默认值):systemd认为该服务将当即启动。服务进程不会fork。若是该服务要启动其余服务,不要使用此类型启动,除非该服务是socket激活型。
Type=forking:systemd认为当该服务进程fork,且父进程退出后服务启动成功。对于常规的守护进程(daemon),除非你肯定此启动方式没法知足需求,使用此类型启动便可。使用此启动类型应同时指定 PIDFile=,以便systemd可以跟踪服务的主进程。
Type=oneshot:这一选项适用于只执行一项任务、随后当即退出的服务。可能须要同时设置 RemainAfterExit=yes 使得 systemd 在服务进程退出以后仍然认为服务处于激活状态。
Type=notify:与 Type=simple 相同,但约定服务会在就绪后向 systemd 发送一个信号。这一通知的实现由 libsystemd-daemon.so 提供。
Type=dbus:若以此方式启动,当指定的 BusName 出如今DBus系统总线上时,systemd认为服务就绪。
Type=idle: systemd会等待全部任务(Jobs)处理完成后,才开始执行idle类型的单元。除此以外,其余行为和Type=simple 相似。
PIDFile:pid文件路径
ExecStart:指定启动单元的命令或者脚本,ExecStartPre和ExecStartPost节指定在ExecStart以前或者以后用户自定义执行的脚本。Type=oneshot容许指定多个但愿顺序执行的用户自定义命令。
ExecReload:指定单元从新加载时执行的命令或者脚本。
ExecStop:指定单元中止时执行的命令或者脚本。
PrivateTmp:True表示给服务分配独立的临时空间
Restart:这个选项若是被容许,服务重启的时候进程会退出,会经过systemctl命令执行清除并重启的操做。
RemainAfterExit:若是设置这个选择为真,服务会被认为是在激活状态,即便因此的进程已经退出,默认的值为假,这个选项只有在Type=oneshot时须要被配置。
5.4.3[install]
在这部分咱们配置了tomcat运行时的使用用户。在这部分可包含以下内容:
Alias:为单元提供一个空间分离的附加名字。
RequiredBy:单元被容许运行须要的一系列依赖单元,RequiredBy列表从Require得到依赖信息。
WantBy:单元被容许运行须要的弱依赖性单元,Wantby从Want列表得到依赖信息。
Also:指出和单元一块儿安装或者被协助的单元。
DefaultInstance:实例单元的限制,这个选项指定若是单元被容许运行默认的实例。

6.总结
本篇讲述了如何在CentOs7上安装Oracle JDK和Tomcat,同时也对交互式shell和非交互式shell读取环境变量的不一样之处作了比较,交互式shell从/etc/profile中读取全部用户的环境变量设置,非交互式shell则从/etc/bashrc中读取全部用户的环境变量设置。最后还演示了如何将Tomcat配置成service,保持和系统一块儿启动。
 

声明:本文首发于本人我的微信订阅号:zhoujinqiaoIT,其后会同时在本人的CSDN、51CTO及oschina三处博客发布,本人会负责在此四处答疑。

相关文章
相关标签/搜索