我正在制作一个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。
对我来说,问题已经解决