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



我正在制作一个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的定义。PID文件是一个包含进程标识符的文件。如果Tomcat的启动脚本是在CATALINA_PID环境变量设置正确的情况下运行的,那么Tomcat进程的PID将在启动时记录到一个文件中。如果在尝试启动Tomcat时该文件存在,则脚本将拒绝运行,因为它不想破坏(可能有效的)PID文件。

如果您确定Tomcat没有运行,只需删除该文件(它应该可以通过CATALINA_PID环境变量获得),然后重试。

我分享@jordanm关于使用退出代码而不是检查特定(文本)输出的评论:Tomcat的最新版本甚至不使用上面显示的消息,所以它非常脆弱。

如果你想要一个自重新启动的服务,可以考虑看看jsvc,它实际上是以源代码形式随Tomcat二进制文件一起提供的

当我重新启动tomcat时也遇到了同样的问题。此外,我在cataline.out日志文件中发现了"java.net.BindException:无法分配请求的地址"。

原因:使用killall -9 java杀死所有java pid,并再次启动tomcat

对我来说,问题已经解决

相关内容

最新更新