0%

Tomcat10在Linux服务器的安装

本文操作仅供参考,西北民族大学21级计科2班WEB开发基础91704X08教师孟老师课程笔记

[前提环境]

首先有一台Linux服务器,笔者的服务器为centos7.9环境为Java17,并且能够链接SSH

笔者使用远程工具进行链接并安装

前提环境

安装

Apache Tomcat官网下载安装包(过程中可能需要用到加速器进行加速下载)并上传到服务器

安装包位置

笔者将安装包上传到服务器的/www/Tomcat文件夹中

并使用tar -xzvf [文件名].tar.gz解压

  • -x 表示解压
  • -z 表示使用 gzip 解压
  • -v 表示显示详细过程
  • -f 表示指定文件名。

解压完毕后在/www/Tomcat/apache-tomcat-10.1.13

尝试运行tomcatsudo /www/Tomcat/apache-tomcat-10.1.13/bin/startup.sh

启动服务

出现&解决问题:打开ip:8080无效

开放防火墙并打开默认端口8080后,发现无法链接到网页,在服务器上也发现8080端口没有被使用

解决想法1——把端口调为8880

打开/www/Tomcat/apache-tomcat-10.1.13/conf/server.xml,修改以下代码

1
2
3
4
5
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxParameterCount="1000"
/>

修改为port=”8880”

使用sudo /www/Tomcat/apache-tomcat-10.1.13/bin/shutdown.sh关闭时报错

1
2
3
4
5
6
7
8
9
Using CATALINA_BASE:   /www/Tomcat/apache-tomcat-10.1.13
Using CATALINA_HOME: /www/Tomcat/apache-tomcat-10.1.13
Using CATALINA_TMPDIR: /www/Tomcat/apache-tomcat-10.1.13/temp
Using JRE_HOME: /
Using CLASSPATH: /www/Tomcat/apache-tomcat-10.1.13/bin/bootstrap.jar:/www/Tomcat/apache-tomcat-10.1.13/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Unrecognized option: --add-opens=java.base/java.lang=ALL-UNNAMED
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

解决想法2——删除JRE_HOME环境变量

笔者cd到文件夹下使用./startup.sh后出现以下报错,并且分析Java路径后发现问题
报错

可能是在同时拥有jdk和jre时优先选择jre,以前的jre的路径存在问题,此时打开/etc/profile发现环境配置确实存在问题环境配置

JRE_HOME以及不存在了可是并没有删去,我们将其删去,并使用source /etc/profile加载配置

解决想法3——添加JRE_HOME变量

还是报错

报错2

此时发现是没有添加RE_HOME导致的,此时我们需要新增一个变量,因为笔者使用的是jdk,所以JRE_HOME也设置成和JAVA_HOME一样的路径,并使用source /etc/profile加载配置

设置环境变量

发现正常运行运行

解决成功

打开设置的8880端口发现成功开启Tomcat

开启tomcat

使用ps aux |grep tomcat命令查看tomcat运行状态

tomcat运行状态

发现有多个tomcat运行,原因是因为之前的命令加上了sudo,初步认为sudo用的环境变量有问题

不同发行版配置的sudo缺省配置不同,结果就是sudo环境中的环境变量不同。

有的sudo,使用当前用户的环境,仅仅只更改PATH等极少数的环境,同时具有管理员权限,尤其是HOME仍然指向当前用户的HOME而不是root用户的HOME。

有的sudo,是直接把当前环境改为root的环境,当前用户名以及很多相关的环境变量都改变了,HOME变成了root的HOME,所以会安装到完全不同的路径。

两种sudo各有各的用途,我个人是倾向于保持环境的做法的。当然如果你不希望完全依赖发行版来决定其行为,那么就自己改一下sudo的配置文件,以确认这个行为是你想要的那种样子。

作者:pansz
链接:https://www.zhihu.com/question/317677918/answer/633972195
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

使用命令ps -ef | grep tomcat | grep -v grep | awk '{print $2}' | xargs kill -9将其全部删除

在使用/www/Tomcat/apache-tomcat-10.1.13/bin/startup.sh启动即可

结果

添加计划任务

添加计划任务,执行时间为每天凌晨3:30(凌晨服务器压力小适合刷新任务)

计划任务代码如下

1
2
3
ps -ef | grep tomcat | grep -v grep | awk '{print $2}' | xargs kill -9
cd /www/Tomcat/apache-tomcat-10.1.13/bin
nohup ./startup.sh>> ./Tomcat启动服务日志.log 2>&1 &

将Tomcat所有进程删除后再启动startup.sh并将日志保存在Tomcat启动服务日志.log

添加启动

可能是宝塔计划任务的原因,发现有进程可能没有启动

我们编写以下代码

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#!/bin/bash
SHELL_NAME='daemon.sh'
SHELL_LOG='/www/Tomcat/apache-tomcat-10.1.13/bin/启动日志/Tomcat启动服务日志.log'
QZ_TOMCAT_HOME='/www/Tomcat/apache-tomcat-10.1.13'
QZ_HREF='http://localhost:8880'

doWork(){
TOMCAT_HOME=$1
HREF=$2
STARTTOMCAT=$TOMCAT_HOME/bin/startup.sh
proc_id=`ps -ef | grep -i ${TOMCAT_HOME} | grep -v "grep" | awk '{print $2}'`
echo ${proc_id[@]}
if [[ -z $proc_id ]];then # 表示服务停止了
echo ${TOMCAT_HOME} " 没有运行! "
echo ${TOMCAT_HOME} " 没有运行! " >> $SHELL_LOG

sleep 3
$STARTTOMCAT
echo "休眠3秒后执行启动命令!"
echo "休眠3秒后执行启动命令!" >> $SHELL_LOG
else
echo ${TOMCAT_HOME}" pid is "${proc_id[@]}
echo "Request href is " ${HREF}
proc_result=`curl ${HREF}`
echo "proc_result is " ${proc_result[@]} " !"
if [ "OK" = "$proc_result" ];then
echo ${TOMCAT_HOME} " 服务正常运行 "
else
echo ${TOMCAT_HOME} "不正常!"
echo ${TOMCAT_HOME} "不正常!" >> $SHELL_LOG

echo "正在终止服务..."

for pid in ${proc_id[*]}
do
echo ${pid}
kill -9 ${pid}

if [ $? -eq 0 ];then
echo ${TOMCAT_HOME} "is killed ..."
echo ${TOMCAT_HOME} "is killed ..." >> $SHELL_LOG
echo "startup $TOMCAT_HOME"
echo "startup $TOMCAT_HOME" >> $SHELL_LOG
$STARTTOMCAT
echo "启动命令已执行!"
echo "启动命令已执行!" >> $SHELL_LOG
else
echo ${TOMCAT_HOME} " 失败 "
echo ${TOMCAT_HOME} " 失败 ..." >> $SHELL_LOG
fi
done
fi
fi
}

# 轮询调用函数
while true ;do
echo "--------------------------分割线--------------------------"
echo "shell日志路径为 " $SHELL_LOG
echo "当前时间是 " $(date +"%Y-%m-%d %H:%M:%S")
echo "当前时间是 " $(date +"%Y-%m-%d %H:%M:%S") >> $SHELL_LOG
echo "----------------------------------------------------"
doWork $QZ_TOMCAT_HOME $QZ_HREF
echo "-------------------------结束-------------------------"
sleep 600
done

代码以及解释说明详见Linux下的进程守护脚本代码示例(守护Tomcat服务)

使用*nohup ./daemon.sh &*即可

问题发现与解决
1
2
3
4
5
6
7
8
proc_result=`curl ${HREF}`
echo "proc_result is " ${proc_result[@]} " !"
if [ "OK" = "$proc_result" ];then
echo ${TOMCAT_HOME} " 服务正常运行 "
echo ${TOMCAT_HOME} "服务正常运行" >> $SHELL_LOG
else
echo ${TOMCAT_HOME} "不正常!"
echo ${TOMCAT_HOME} "不正常!" >> $SHELL_LOG

此处判断有问题,判断”OK” = “$proc_result”时如果直连网页会一直不正常并重启

日志

所以我们应该建立一个文件仅只有ok的一个,所以我们在目录下建立一个isrun.txt文件来判断服务是否正常运行即可,isrun.txt文件内容为OK即可,将QZ_HREF='http://localhost:8880'改为QZ_HREF='http://localhost:8880/isrun.txt'

判断成功

成功判断

web站点建设

修改根路径

修改Tomcat主配置文件conf/server.xml

在尾端添加以下代码

1
<Context path="" docBase="/www/wwwroot/jike" />

其中,path为根目录为/,基本路径为/www/wwwroot/jike

添加主页文件

在基本路径下添加index.jsp

添加内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
<%@ page language="java" %>
<%@ page import="java.util.*" %>

<html>
<head>
<title>
jsp test page
</title>
</head>
<body>
<% out.println("Hello,world"); %>
</body>
</html>

重启tomcat

成功

成功

添加反向代理以及防火墙

互联网是一个混乱的网络,期间充斥着许多攻击,所以我们加上防火墙并进行反向代理以及开启应用防火墙WAF

反向代理主要逻辑如下

反向代理

网站防火墙

系统防火墙

技术分享,如果您觉得内容不错的话不妨进行打赏,您的支持将鼓励我继续创作!


如果你对本文有看法或更好的见解可以点击下方按钮进行评论
*注:本站为非交互网站
此按钮将会转跳至评论站点 i-nmb.chat 进行评论

欢迎关注我的其它发布渠道