Shell Tomcat servlet引擎未运行,但存在pid文件。这个信息是什么意思?如果我得到Tomcat,我需要找回它吗?

Shell Tomcat servlet引擎未运行,但存在pid文件。这个信息是什么意思?如果我得到Tomcat,我需要找回它吗?,shell,tomcat,tomcat7,crontab,recover,Shell,Tomcat,Tomcat7,Crontab,Recover,我正在制作一个shell脚本,以便在崩溃后重新启动tomcat。 我想知道我是否需要在脚本“TomcatServlet引擎未运行,但pid文件存在”中处理此消息 这个信息是什么意思? 我是否需要将其视为迫使我重新启动Tomcat的错误消息 我的脚本如下: #!/bin/bash SERVICE=/etc/init.d/tomcat7 STOPPED_MESSAGE=" * Tomcat servlet container is not running." PID_FILE_MESSAGE="

我正在制作一个shell脚本,以便在崩溃后重新启动tomcat。 我想知道我是否需要在脚本“TomcatServlet引擎未运行,但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
这里是对的定义。PID文件是包含进程标识符的文件。如果Tomcat的启动脚本是在
CATALINA\u PID
环境变量设置正确的情况下运行的,那么Tomcat进程的PID将在启动时记录到一个文件中。如果在您尝试启动Tomcat时该文件存在,脚本将拒绝运行,因为它不想删除(可能是有效的)PID文件

如果确定Tomcat没有运行,只需删除该文件(该文件应通过
CATALINA\u PID
环境变量提供),然后重试

我同意@jordanm关于使用退出代码而不是检查特定(文本)输出的评论:Tomcat的最新版本甚至没有使用您上面显示的消息,因此它非常脆弱


如果您想要一个自启动服务,请考虑查看,它实际上以源代码形式随Tomcat二进制文件一起提供。

我在重新启动Tomcat时遇到了相同的问题。我还在cataline.out日志文件中发现“
java.net.BindException
:无法分配请求的地址”

Soultion:通过使用
killall-9java
再次重启tomcat来杀死所有java pid


对于我来说,问题已经解决了

您应该查看退出代码,而不是文本输出。谢谢@jordanm,您可以发布一个我们如何查看退出代码的示例吗?
$SERVICE status;如果($?==0));然后呼应“奔跑”;fi
。如果您使用的是Linux,LSB定义了应该提供哪些退出代码:感谢Christopher的回答,但是我想知道为什么“TomcatServlet引擎没有运行”而“可能存在有效的PID文件”?这个案子什么时候发生的?如果我收到这封邮件,我该怎么办?请重新阅读我的答案:它提供了你在评论中提出的两个问题的答案。谢谢你,克里斯托弗,请原谅我的快速反应。