我的 tomcat 实例出现了一些问题。我在 Linux 上使用 apache-tomcat-6.0.20。我的操作系统是 CENTOS
当我执行命令时
# bin/shutdown.sh
它不会关闭正在运行 tomcat 的进程。
有人能告诉我一些想法吗?这个过程是怎样的?
答案1
我在 Tomcat 中多次遇到过此问题。以下几件事可能有所帮助:
- 等待一段时间以确保进程确实没有关闭;Tomcat 关闭脚本会尝试进行干净关闭,如果 Tomcat 服务器在调用关闭脚本时打开了大量线程,则可能需要一段时间。如果花费的时间超过 5 到 10 分钟,则可能是存在其他问题。
- 查看日志文件(通常是 Tomcat 主目录下的 logs/catalina.out)——十有八九你会找到指向潜在问题的线索。如果你需要更多帮助,请直接在此处发布错误消息。
答案2
您的系统是否无法关闭?(即挂起?)如果没有,那么它肯定正在关闭进程,只是方式可能不是您想要的。启动脚本是您编写的还是包含在软件包中?假设您已经对 /etc/init.d 脚本进行了一些操作,这样正确吗?您需要向我们提供更多信息。
很可能,您需要使用 chkconfig 注册该进程。仅将 Kscripts 放入 /etc/rc#.d/ 是不够的,因为我认为如果 chkconfig 不知道它们,它们就不会被调用。
本质上,你的脚本需要在顶部写几行说明
# chkconfig:345 99 10 # 描述:这就是我的脚本所做的。
第一行说明应在哪个运行级别启动,以及优先级启动和关闭级别。(它将在 /etc/rc3.d、/etc/rc4.d 和 /etc/rc5.d 中创建 S99 脚本,并在其余所有脚本中创建 K10 脚本)
除此之外,chkconfig 还会检查 /var/lock/subsys/ 中是否有适合您服务的锁定文件。因此,在服务启动时,触摸该目录中与您的服务同名的文件,并在服务退出时将其删除。
假设您的脚本中包含上述内容,则必须使用 chkconfig 注册该脚本。要添加脚本,请执行chkconfig --add <name>
。只需确保脚本位于 /etc/init.d/ 中且具有正确的名称即可。
答案3
您是否安装了分析功能?Tomcat 有一个已知的分析问题,即如果安装了它,它无法正常关闭。有一个针对 shutdown.sh 脚本的解决方法,但我自己仍在寻找它。这是在 Tomcat 7 中,不知道它是否也在 Tomcat 6 中。
答案4
关闭 tomcat 的最佳方法是使用关闭脚本。但许多人遇到问题,最终手动终止进程。
仅当关机过程中涉及的脚本符合以下任一条件时,关机脚本才能正常工作:
- 归用户所有。
- 由用户的主要组拥有
如果用户属于次要组,则此方法无效。
如果您必须选择终止进程,则可以使用下面提到的脚本将其作为单个命令(查找进程然后终止它)。只需将其放入脚本中并在您想要终止正在运行的 tomcat 时运行它即可。
#Finds the tomcat process id
ps aux | grep tomcat | grep JavaVirtualMachines | awk -F " " '{print $2}' > tomcatProcessID
#Kills the process id returned from above mentioned command.
kill -9 `cat tomcatProcessID` && tput setaf 3 && echo "Tomcat killed Successfully" ;rm -rf tomcatProcessID
#Not a mandatory command.
#Used to show all the remaining processes with 'tomcat' keyword in it.
#To inform on the console that the tomcat (running ess or indexer) is killed.
ps aux | grep tomcat | grep -v grep | grep -v killtomcat
如果您愿意,您可以ps aux | grep tomcat | grep -v grep | grep -v killtomcat
在末尾添加以显示尝试终止后剩余的 tomcat 进程。
我希望它有帮助。