Tomcat servlet 引擎未运行,但存在 pid 文件。这条消息是啥意思?如果我得到它,我需要恢复 Tomcat 吗?
Posted
技术标签:
【中文标题】Tomcat servlet 引擎未运行,但存在 pid 文件。这条消息是啥意思?如果我得到它,我需要恢复 Tomcat 吗?【英文标题】:Tomcat servlet engine is not running, but pid file exists. What does this message mean? Do I need to recover Tomcat if I get it?Tomcat servlet 引擎未运行,但存在 pid 文件。这条消息是什么意思?如果我得到它,我需要恢复 Tomcat 吗? 【发布时间】:2012-08-02 11:10:53 【问题描述】:我正在制作一个 shell 脚本来在崩溃后重新启动 tomcat。 我想知道我需要在我的脚本“Tomcat servlet 引擎未运行,但 pid 文件存在”中处理此消息。 这条消息是什么意思? 我是否需要将其视为强制我重新启动 Tomcat 的错误消息?
我的脚本如下:
#!/bin/bash
SERVICE=/etc/init.d/tomcat7
STOPPED_MESSAGE=" * Tomcat servlet container is not running."
PID_FILE_MESSAGE=" * Tomcat servlet engine is not running, but pid file exists."
if [ "`$SERVICE status`" == "$STOPPED_MESSAGE" ];
then
$SERVICE start
else
if [ "`$SERVICE status`" == "$PID_FILE_MESSAGE" ];
then
$SERVICE restart
fi
fi
【问题讨论】:
您应该查看退出代码,而不是文本输出。 谢谢@jordanm,你能发布一个我们如何查看退出代码的例子吗?$SERVICE status; if (( $? == 0 )); then echo "running"; fi
。如果您使用的是 Linux,LSB 定义应提供哪些退出代码:refspecs.linuxbase.org/LSB_3.1.1/LSB-Core-generic/…
【参考方案1】:
这是PID 的定义。 PID 文件是包含进程标识符的文件。如果Tomcat的启动脚本是在CATALINA_PID
环境变量设置正确的情况下运行的,那么Tomcat进程的PID会在启动时记录到一个文件中。如果在您尝试启动 Tomcat 时该文件存在,脚本将拒绝运行,因为它不想破坏(可能是有效的)PID 文件。
如果您确定 Tomcat 没有运行,只需删除该文件(它应该可以通过 CATALINA_PID
环境变量获得)并重试。
我分享了@jordanm 关于使用退出代码而不是检查特定(文本)输出的评论:最新版本的 Tomcat 甚至不使用您上面显示的消息,所以它非常脆弱。
如果您想要一个自启动服务,请考虑查看jsvc,它实际上以源代码形式随 Tomcat 二进制文件一起提供。
【讨论】:
感谢 Christopher 的回答,但我想知道为什么“Tomcat servlet 引擎未运行”但“可能存在有效的 PID 文件”?这种情况什么时候发生?如果我收到这条消息,我该怎么办? 请重新阅读我的回答:它为您(重新)在评论中提出的两个问题提供了答案。 谢谢克里斯托弗,请原谅我的快速反应。【参考方案2】:当我重新启动 tomcat 时,我遇到了同样的问题。我还在 cataline.out 日志文件中找到了“java.net.BindException
:无法分配请求的地址”。
Soultion: 使用killall -9 java
杀死所有java pid,然后重新启动tomcat。
对我来说问题已经解决了
【讨论】:
以上是关于Tomcat servlet 引擎未运行,但存在 pid 文件。这条消息是啥意思?如果我得到它,我需要恢复 Tomcat 吗?的主要内容,如果未能解决你的问题,请参考以下文章
web.xml - Java Servlet 过滤器 - 在处理 JSP 页面之前未运行(在 Tomcat 上)
jsp页面被tomcat引擎运行的时候组装成java片段,但是这些java片段怎么没有main方法作为程序的入口啊?