首页 > 其他分享 >强制关闭Tomcat

强制关闭Tomcat

时间:2022-10-29 22:11:13浏览次数:48  
标签:CATALINA Tomcat tomcat echo sh usr 关闭 强制 local

背景

由于应用项目及其复杂,应用自己开启的线程在tomcat停止时没有关闭,便会导致tomcat进程没有终止。但是tomcat监听的端口却已经释放,因为执行shutdown.sh脚本时,tomcat自身服务会关闭,但是由于应用中还存在非守护线程,于是JVM进程(即tomcat进程)便不会退出。这时候再次执行startup.sh脚本时,不会报端口占用的错,甚至还是同一个进程,就会发生诡异的事情,可能明明应用中只有一个名为a的线程,然后通过jstack命令打印堆栈会发现名为a的线程出现多次。

强制杀死tomcat进程

通过阅读catalina.sh脚本,可以看到文件最后有如下提示信息

echo "Usage: catalina.sh ( commands ... )"
  echo "commands:"
  if $os400; then
    echo "  debug             Start Catalina in a debugger (not available on OS400)"
    echo "  debug -security   Debug Catalina with a security manager (not available on OS400)"
  else
    echo "  debug             Start Catalina in a debugger"
    echo "  debug -security   Debug Catalina with a security manager"
  fi
  echo "  jpda start        Start Catalina under JPDA debugger"
  echo "  run               Start Catalina in the current window"
  echo "  run -security     Start in the current window with security manager"
  echo "  start             Start Catalina in a separate window"
  echo "  start -security   Start in a separate window with security manager"
  echo "  stop              Stop Catalina, waiting up to 5 seconds for the process to end"
  echo "  stop n            Stop Catalina, waiting up to n seconds for the process to end"
  echo "  stop -force       Stop Catalina, wait up to 5 seconds and then use kill -KILL if still running"
  echo "  stop n -force     Stop Catalina, wait up to n seconds and then use kill -KILL if still running"
  echo "  configtest        Run a basic syntax check on server.xml - check exit code for result"
  echo "  version           What version of tomcat are you running?"
  echo "Note: Waiting for the process to end and use of the -force option require that \$CATALINA_PID is defined"

可以看到通过-force选项强行杀死tomcat进程,也就是说先正常关闭tomcat进程,等待5秒(默认值)后如果进程还在则使用kill -9的方式强制杀死进程。
但是使用-force选项时需要CATALINA_PID这个变量存在。

tomcat可以在bin目录下的setenv.sh文件里指定变量的值,catalina.sh脚本执行时会导入该文件中的变量,这样就可以不用修改catalina.sh文件了

第一步
在bin目录下新建setenv.sh文件,指定CATALINA_PID的值,注意CATALINA_PID是一个文件,而内容才是PID进程号

CATALINA_PID=$CATALINA_HOME/bin/CATALINA_PID

第二步
修改shutdown.sh文件,在最后一行添加-force选项

# 原来是exec "$PRGDIR"/"$EXECUTABLE" stop "$@"
exec "$PRGDIR"/"$EXECUTABLE" stop 10 -force "$@"

效果

sh startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/java/jdk1.8.0_181
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_PID: /usr/local/tomcat/bin/CATALINA_PID
Tomcat started.

sh shutdown.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/java/jdk1.8.0_181
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_PID: /usr/local/tomcat/bin/CATALINA_PID
Tomcat stopped.

标签:CATALINA,Tomcat,tomcat,echo,sh,usr,关闭,强制,local
From: https://www.cnblogs.com/wt20/p/16840024.html

相关文章

  • Kafka的启动与关闭
    以Windows系统为例启动zookeeper打开cmd并进入kafka的安装目录cdC:\BigData\kafka_2.13-3.3.1启动zookeeper并指定启动的配置文件bin\windows\zookeeper-server-st......
  • 开启clash以后,一些直连网站打不开,而关闭clash就可以打开
    绕过系统代理ClashforWindows在v0.4.5版本后可以自定义系统代理需要绕过的域名或IP#设置方式进入Settings页面点击SystemproxyBypass右边Edit小字打开......
  • 开启clash以后,一些直连网站打不开,而关闭clash就可以打开
    绕过系统代理ClashforWindows在v0.4.5版本后可以自定义系统代理需要绕过的域名或IP#设置方式进入Settings页面点击SystemproxyBypass右边Edit小字打开......
  • Nginx代理后端Tomcat
    拉取镜像并运行dockerpullnginx:1.23dockerpulltomcat:8dockerrun-dnginx:1.23dockerrun-dtomcat:8进入nginx容器安装vim命令并备份安装vim命令apt-get......
  • Spring Boot系列之修改内置Tomcat版本
    背景在springboot出来之前,或者没有使用springboot时,JavaEE开发时如果选择tomcatservlet,需要自己指定tomcat版本;此处没有考虑那种直接把打包的war直接扔到本地......
  • springboot 临时关闭 springSecurity 权限认证
    Springboot项目有时候本地测试,但是有springsecurity的权限认证,很不方便测试。临时关闭方式启动类上去掉配置:@SpringBootApplication(exclude={SecurityAutoConfigur......
  • 驱动开发:内核强制结束进程运行
    通常使用Windows系统自带的任务管理器可以正常地结束掉一般进程,而某些特殊的进程在应用层很难被结束掉,例如某些系统核心进程其权限是在0环内核态,但有时我们不得不想办法结......
  • 驱动开发:内核强制结束进程运行
    通常使用Windows系统自带的任务管理器可以正常地结束掉一般进程,而某些特殊的进程在应用层很难被结束掉,例如某些系统核心进程其权限是在0环内核态,但有时我们不得不想办法结束......
  • Springboot错误:Unable to start embedded Tomcat server
    报错内容/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/bin/java-XX:TieredStopAtLevel=1-noverify-Dspring.output.ansi.enabled=always-javaagent:/......
  • 学习笔记——Tomcat(服务器)
    2022-10-28Tomcat(1)含义:Tomcat是一个使用广泛的JavaWeb服务器。(2)官方下载地址:https://tomcat.apache.org/使用8.0版本的就OK。(3)在使用Tomcat之前需要的准备工作:正......