一个计算机技术爱好者与学习者

0%

好好学Linux:CentOS7中安装配置Tomcat

1. 前言

本文中,我们学习在CentOS7中安装配置Tomcat的方法。

2. 安装JDK

Tomcat依赖JDK,首先参考《全平台安装JDK》,安装配置好JDK。

3. 安装Tomcat

1、下载tomcat8.0.50

1
wget http://www-eu.apache.org/dist/tomcat/tomcat-8/v8.0.50/bin/apache-tomcat-8.0.50.tar.gz

2、解压tomcat到/opt目录

1
tar -xzvf apache-tomcat-8.0.50.tar.gz -C /opt

3、启动tomcat

1
2
cd /opt/apache-tomcat-8.0.50/bin/
./startup.sh

4、测试访问

1
curl localhost:8080

测试时,遇到一个坑,curl命令卡在那里不动了,浏览器访问也是一直转圈,十几分钟了还在转。。。

4. 访问Tomat卡住问题

猜测是tomcat版本有问题?换了8.5.29,依然不行;换了7.0.85,依然不行。
猜测是jdk版本有问题?换了1.8.0_161,依然不行。

最终找到了答案:Centos7+Tomcat8配置javaweb环境,tomcat启动巨慢的问题,需要安装rng服务。

1
2
3
yum install rng-tools
systemctl start rngd
systemctl enable rngd

安装rngd后,就可以正常访问tomcat了。

PS:关闭tomcat方法

1
2
cd /opt/apache-tomcat-8.0.50/bin/
./shutdown.sh

5. 基于supervisor设置开机自启动

参考《CentOS安装配置Supervisor》,安装配置好supervisor。

1、在/etc/supervisor中新建tomcat.conf文件

1
2
3
4
5
6
7
8
9
[program:tomcat]
directory=/opt/apache-tomcat-8.0.50
command=/opt/apache-tomcat-8.0.50/bin/catalina.sh run
environment=JAVA_HOME="/usr/lib/jvm/jdk1.8.0_161",JAVA_BIN="/usr/lib/jvm/jdk1.8.0_161/bin"
user=root
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/%(program_name)s.log
stderr_logfile=/var/log/supervisor/%(program_name)s.log

2、重启supervisor

1
systemctl retart supervisord

3、重启tomcat

1
supervisorctl -c /etc/supervisord.conf restart tomcat

4、测试访问

1
curl localhost:8080

5、重启验证tomcat开启自启动

1
2
3
reboot
# 重启后执行
supervisorctl status

6. 失败的开机自启动配置(选读)

6.1. 基于systemd设置开机自启动

参考《在CentOS7中设置Tomcat开机自启动》,设置开机自启动:

1、为Tomcat添加启动参数
catalina.sh 在执行的时候会调用同级路径下的setenv.sh来设置额外的环境变量,因此在/opt/tomcat/bin路径下创建setenv.sh文件,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
# 设置JAVA_HOME
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_161
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

export CATALINA_HOME=/opt/apache-tomcat-8.0.50
export CATALINA_BASE=/opt/apache-tomcat-8.0.50
# 设置Tomcat的PID文件
CATALINA_PID="$CATALINA_BASE/tomcat.pid"
# 添加JVM选项
JAVA_OPTS="-server -XX:PermSize=256M -XX:MaxPermSize=1024m -Xms512M -Xmx1024M -XX:MaxNewSize=256m"

2、创建systemd服务配置文件 tomcat.service

1
2
cd /etc/systemd/system/
vim tomcat.service

tomcat.service 内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[Unit]
Description=tomcat
After=syslog.target network.target remote-fs.target nss-lookup.target

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

[Install]
WantedBy=multi-user.target

3、把tomcat加入开机自启动

1
systemctl enable tomcat.service

enable之后,会多出两个文件:

  • /etc/systemd/system/multi-user.target.wants/tomcat.service
  • /etc/selinux/targeted/active/modules/100/tomcat

5、重启验证tomcat开启自启动

1
2
3
reboot
# 重启后执行
systemctl status tomcat.service

看到tomcat已经启动,正想着大功告成,却发现浏览器访问又开始转圈了。检查rng服务,启动正常。

直接使用 ./startup.sh 启动正常,而使用 systemctl start tomcat 就转圈,还能是什么原因?
参照《CentOS7下Tomcat启动慢的原因及解决方案》一文,修改java.security,无效;修改catalina.sh,无效。
是不是tomcat.service写的有问题,参照其他配置方案修改,依然无效。
想到《Dockerfile使用Supervisor管理Tomcat》一文中,supervisor启动tomcat也会有些问题。那么,修改startup.sh呢?依然无效。

最终没有配置成功,留个坑。

6.2. 基于SysVinit设置开机自启动

1、在/etc/init.d下创建服务脚本 tomcat

1
2
vim /etc/init.d/tomcat
chmod a+x /etc/init.d/tomcat

tomcat 脚本内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#!/bin/bash
#
# tomcat startup script for the Tomcat server
#
#
# chkconfig: 345 80 20
# description: start the tomcat deamon
#
# Source function library
. /etc/rc.d/init.d/functions

prog=tomcat
# 根据自己的路径改写JAVA_HOME
JAVA_HOME=/usr/lib/jvm/jdk1.8.0_161/
export JAVA_HOME
# 根据自己的路径改写CATALANA_HOME
CATALANA_HOME=/opt/apache-tomcat-8.0.50/
export CATALINA_HOME

case "$1" in
start)
echo "Starting Tomcat..."
$CATALANA_HOME/bin/startup.sh
;;

stop)
echo "Stopping Tomcat..."
$CATALANA_HOME/bin/shutdown.sh
;;

restart)
echo "Stopping Tomcat..."
$CATALANA_HOME/bin/shutdown.sh
sleep 2
echo
echo "Starting Tomcat..."
$CATALANA_HOME/bin/startup.sh
;;

*)
echo "Usage: $prog {start|stop|restart}"
;;
esac
exit 0

2、测试启动

1
service tomcat start

启动成功,然而,还是转圈。。。

实际上,因为系统版本的原因,init.d方法添加的自启动服务,也会加入到systemctl的管理。所以,报错表现和systemd配置的开机自启动问题相同。

无奈,最终换成了supervisor来设置开机自启动,配置成功。

  • 本文作者: 好好学习的郝
  • 原文链接: https://www.voidking.com/dev-centos-tomcat/
  • 版权声明: 本文采用 BY-NC-SA 许可协议,转载请注明出处!源站会即时更新知识点并修正错误,欢迎访问~
  • 微信公众号同步更新,欢迎关注~