日期:2014-05-16  浏览次数:20720 次

解决linux下tomcat 关闭不了的bug

    最近项目中需要使用tomcat的shutdown命令关闭tomcat,但关闭时出现如下错误: Kill failed: $CATALINA_PID not set。查看catalina.sh文件里,发现是因为$CATALINA_PID变量为空时会打印该消息。$CATALINA_PID变量是一个pid文件,用来存储tomcat运行的pid。在文件开头加上CATALINA_PID="tomcat.pid"就不会报此消息了。

    运行startup.sh,bin目录下出现了tomcat.pid文件,说明生效了。再次运行shutdown.sh,报“Tomcat did not stop in time. PID file was not removed”。

    后来经过调试发现,tomcat例子是可以正常关闭的,而我的项目不行。经分析并调试,发现我的项目中用到了ScheduledThreadPoolExecutor(可能是未接受stop消息导致的),导致了shutdown命令未能成功。将ScheduledThreadPoolExecutor改成spring的quartz调度就ok了。