等到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完成启动的主要内容,如果未能解决你的问题,请参考以下文章
在Tomcat的安装目录下conf目录下的server.xml文件中增加一个xml代码片段,该代码片段中每个属性的含义与用途