等到tomcat完成启动

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了等到tomcat完成启动相关的知识,希望对你有一定的参考价值。

我有一个脚本需要在tomcat完成启动后运行并准备开始部署应用程序。我正在使用$TOMCAT_HOME/bin/startup.sh,它会立即返回。我怎么能等到tomcat完成启动?

答案

可能有几种方法可以做到这一点。我们使用的技巧是:

#!/bin/bash

until [ "`curl --silent --show-error --connect-timeout 1 -I http://localhost:8080 | grep 'Coyote'`" != "" ];
do
  echo --- sleeping for 10 seconds
  sleep 10
done

echo Tomcat is ready!

希望这可以帮助!

另一答案

以编程方式实现并不困难。你可以实现org.apache.catalina.LifecycleListener然后你就可以了

public void lifecycleEvent(LifecycleEvent lifecycleEvent) {
            if(lifecycleEvent.getType().equals(Lifecycle.START_EVENT))
            //do what you want
            }       
}

在web.xml中:

<Context path="/examples" ...>
...
<Listener className="com.mycompany.mypackage.MyListener" ... >
...
</Context>

请注意,6-9只雄猫之间的某些事情可能会有所不同。

另一答案

你还在寻找答案吗?这取决于你对开始的定义。如果您对starts的定义是“现在可以安全停止”,那么您可能需要验证端口8005是否正在侦听。

另一答案

取决于你完成的意思。你还想等什么?

例如,您可以使用一个脚本重复访问URL,直到获得一个只有在应用程序正确初始化后才可用的理想结果。

您还可以拥有一个上下文侦听器,它会写出一个“我已准备好”的文件,用于表示应用程序的准备情况。 (如果这样做,请确保在启动应用程序容器之前该文件不存在)。

另一答案

没有一种简单的方法。就startup.sh和catalina.sh而言,tomcat在完成时就会运行。虽然在内部,tomcat仍在初始化和启动上下文。

这将有助于知道您是否试图找出您的上下文是否已完成加载,或者您是否只是想要一般,“Tomcat正在运行,尽管您的上下文可能没有完全加载......”

如果是后者,您可以创建一个Web应用程序,它只有一个上下文侦听器,它将使用Runtime执行脚本。如果您很方便,可以通过web.xml文件配置webapp,以接受指向要执行的脚本的参数。

另一答案

就个人而言,我会根据你的设置和你想要的确切阶段来观察catalinas日志中的特定字符串。

另一答案

如果来自远程服务器的tomcat启动进行系统检查,我需要从jenkins进行测试。

until [[ `ssh -o StrictHostKeyChecking=no root@${DEPLOY_HOST} 'netstat -tulpn | grep 8005'` != "" ]] ; do echo "waiting for tomcat"; sleep 6; done

另一答案

我已经使用tomcat中的jenkins pipelinescript中的以下代码完成了它。在我打电话之前

sudo /bin/systemctl restart tomcat

并在我的sudoers文件中为jenkins用户输入一个条目。

现在这里是oneliner:

until [ "$(curl -w '%{response_code}' --no-keepalive -o /dev/null --connect-timeout 1 -u USERNAME:PASSWORD http://localhost:8080/manager/text/list)" == "200" ]; do echo --- sleeping for 1 second; sleep 1; done

更好阅读:

until [ "$(curl -w '%{response_code}' --no-keepalive -o /dev/null --connect-timeout 1 -u USERNAME:PASSWORD http://localhost:8080/manager/text/list)" == "200" ];
do echo --- sleeping for 1 second;
sleep 1;
done

以上是关于等到tomcat完成启动的主要内容,如果未能解决你的问题,请参考以下文章

Python 弹出命令。等到命令完成

十个html5代码片段,超实用,一定要收藏

在Tomcat的安装目录下conf目录下的server.xml文件中增加一个xml代码片段,该代码片段中每个属性的含义与用途

Node.js 等到异步函数完成,然后继续执行其余代码

Node.js 等到异步函数完成,然后继续执行其余代码

NodeJS - 等到流式传输多个文件完成后再继续编写代码