本文操作仅供参考,西北民族大学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变量 还是报错
此时发现是没有添加RE_HOME导致的,此时我们需要新增一个变量,因为笔者使用的是jdk,所以JRE_HOME也设置成和JAVA_HOME一样的路径 ,并使用source /etc/profile
加载配置
发现正常运行
解决成功 打开设置的8880端口发现成功开启Tomcat
使用ps aux |grep 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
反向代理主要逻辑如下