linux下tomcat部署注意点

在Linux下部署Tomcat时,直接拷贝旧项目可能导致问题。需注意:1) 将war包放入webapps,无需解压;2) 删除tomcat/work下的文件;3) 修改server.xml配置端口和路径;4) 编写更新脚本;5) 解决日志冲突和线程清理问题。避免直接复制旧项目,建议使用新安装包。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    在linux下部署的时候,为了方便,直接从其他项目拷贝的tomcat过来,导致了一些比较奇怪的问题,浪费了不少时间,写个记录便于以后查看。

 

1.将war包放入linux服务器的tomcat/webapps目录下

     使用idea的Maven插件将项目打包成war包之后(在打成war包之前请重新编译一遍),放到linux服务器的tomcat/webapps下,不用解压缩,原因后续解释,同时删掉webapps下其他无关文件,以免启动时相互影响。

 

2.删掉tomcat/work下的所有文件

    如果tomcat是从其他项目拷贝过来的,一定要删掉下面的文件,防止奇怪的问题产生。应用启动之后,work下面会有该应用的所有文件。

 

3.修改tomcat/conf/server.xml

   修改监听端口号,http访问端口号,以及其他访问http访问端口号,Context路径设置

   监听端口号修改如下:

<Server port="8077" shutdown="SHUTDOWN">

  http访问端口号修改如下 :

<Service name="Catalina">
    <Connector port="7701" protocol="HTTP/1.1"
     maxThreads="1000"
     minProcessors="100"
     maxProcessors="1000"
     minSpareThreads="100"
     maxSpareThreads="1000"
     enableLookups="false"
     URIEncoding="utf-8"
     acceptCount="1000"
     connectionTimeout="20000"
     disableUploadTimeout="true"
     redirectPort="8443"/>
</Service>

 其他http访问端口修改如下:

<Connector port="8078" protocol="AJP/1.3" redirectPort="8443"/>

  修改访问路径以及sessionId设置:

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
    <Context path="/web" docBase="web" reloadable="true" sessionCookieName="web1"/>
</Host>

  appBase="webapps":配置的webapps对应tomcat/webapps目录;

  unpackWARs="true":表示之前放在tomcat/webapps下的war包不用解压,startup.sh启动时自动解压

  autoDeploy="true":表示tomcat检测到webapps下的web应用更新时,自动发布

  path="/web":表示项目访问路径,即http://localhost:7701/web

  docBase="web":假设项目war包为web.war包,则这个地方配置的web即为web.war解压缩后的tomcat/webapps/web文件夹

  sessionCookieName="web1":手动设置该应用的sessionCookie名称为web1,当同一个linux服务器上两个不同的tomcat部署了相同的应用,即使端口号不一样,即同一个linux部署了http://localhost:7701/web,http://localhost:7702/web两个一样的应用,此时如果不设置sessionCookie的名称,就会导致两个应用的session相互占用,出现异常。因为cookie将同一ip识别为同一域。

 

4.编写更新脚本update.sh

#此处为Linux下的sh脚本
#!/bin/sh
#将上一版本的war包备份到backup文件夹下,-f表示如果原目录下有该文件,直接覆盖掉该文件
#cp -f /home/model/web/tomcat/webapps/web.war /home/model/web/backup

#替换webapps下的war包

#停止应用 有时进程使用shutdown.sh停不掉,可以使用Linux命令(lsof -i:端口号,此处为lsof -i:7701)先查看该应用占用的进程pid,然后使用(kill -9 pid)杀掉进程,
sh /home/model/web/tomcat/bin/shutdown.sh

#启动应用
sh /home/model/web/tomcat/bin/startup.sh

#查看日志
tail -f /home/model/web/tomcat/logs/catalina.out

 

5.遇到的问题

   1)Linux下sh文件无执行权限

         使用Linux命令:chmod +x "*.sh"    为当前用户增加所有sh文件的可执行权限

         chmod:修改文件的权限

         +:表示增加权限,-表示移除权限

         x:如果对象是目录或者它已有执行权限,赋予执行权限

    2)slf4j-log4j12-1.7.5.jar与logback-classic-1.1.2.jar冲突

         当前web项目使用的日志包为logback-classic-1.1.2.jar,而该项目引用的demo1包中使用了slf4j-log4j12-1.7.5.jar包,两者必须共存,还不能修改任何代码。

          首先应该定位冲突的jar包类型,然后确定该web应用使用logback-classic-1.1.2.jar的jar包,想要demo1包依赖的slf4j-log4j12-1.7.5.jar不报错,需要找到是哪个jar包引用了slf4j的包,可以通过IDEA中web项目的Maven Project的依赖树,或者使用快捷键Ctrl+Alt+Shift+U(如果你没改快捷键的话),查看是哪个jar包进行了引用,然后在pom.xml文件中该jar包下添加exclusions,如下:

<dependency>
    <groupId>com.web.demo</groupId>
    <artifactId>demo1</artifactId>
    <version>1.0</version>
    <exclusions>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
        </exclusion>
    </exclusions>
</dependency>

           exclusions:表示排除依赖,web包排除对slf4j包的依赖,demo1包中pom文件的内容不变。这样web包的logback-classic-1.1.2.jar与slf4j-log4j12-1.7.5.jar就不会发生冲突了。

           dependency:可选依赖。

           顺便普及一下Maven依赖的两个原则:路径最短优先,第一声明优先。

   3)使用shutdown.sh时,应用的一些线程杀不掉

         除了使用lsof -i:7701查找占用进程 ,然后kill -9 pid能杀掉一些进程外,还出现了The web application [web] created a ThreadLocal with key of type [java.lang.ThreadLocal] (value [java.lang.ThreadLocal@56848cd7]) and a value of type[io.netty.util.internal.InternalThreadLocalMap](value[io.netty.util.internal.InternalThreadLocalMap@64ba5cdf]) but failed to remove it when the web application was stopped.Threads are going to be renewed over time to try and avoid a probable memory leak.

         网上查了不少解决方案,看的一知半解,最后删掉tomcat/webapps下除web应用的所有文件,以及work下的所有文件,然后杀掉所有的进程,重新启动就好了。

   4)在使用update.sh脚本更新时,有一些进程可能杀不掉,在使用之后,建议检查一下应用是否启动正常

   5)大部分问题是因为我直接使用了其他项目的tomcat,收到之前项目的配置或者文件影响,建议在linux部署时直接使用全新的安装包进行部署。

   6)tomcat查看日志建议将tomcat/logs/catalina.out与tomcat/logs/localhost*.log(localhost开头的日志)对比查看,了解更详细的报错信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值