5

我正在制作一个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
4

2 回答 2

4

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

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

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

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

于 2012-08-05T03:40:06.497 回答
1

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

Soultion:再次使用killall -9 java重新启动tomcat杀死所有java pid 。

对我来说问题已经解决

于 2014-11-17T13:18:16.700 回答