linux下tomcat部署注意点

    在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路径设置

   监听端口号修改如下:

  http访问端口号修改如下 :


    

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

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


    

  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,如下:


    com.web.demo
    demo1
    1.0
    
        
            org.slf4j
            slf4j-log4j12
        
    

           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开头的日志)对比查看,了解更详细的报错信息。

你可能感兴趣的:(Linux)