我有一个脚本,需要运行后,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.Lifecyclelistner,然后你会有
public void lifecycleEvent(LifecycleEvent lifecycleEvent) { if(lifecycleEvent.getType().equals(Lifecycle.START_EVENT)) //do what you want } }
在web.xml中:
<Context path="/examples" ...> ... <listner className="com.mycompany.mypackage.Mylistner" ... > ... </Context>
请注意,有些事情可能会有所不同6-9雄猫。
取决于你的意思完成。 你想等什么?
例如,你可以有一个脚本重复地访问一个URL,直到获得一个理想的结果,这个结果只有在应用程序被正确初始化后才可用。
你也可以有一个上下文监听器,写出一个“我准备好”的文件,用来表示你的应用程序的准备就绪。 (如果这样做,请确保在启动应用程序容器之前文件不存在)。
你还在寻找答案吗? 这取决于你开始的定义。 如果您的启动定义是“现在可以安全停止”,那么您可能需要验证端口8005是否正在侦听。
这不是一个简单的方法。 就startup.sh和catalina.sh而言,tomcat正在运行。 虽然在内部,tomcat仍在初始化和启动上下文。
这将有助于知道你是否试图找出你的上下文是否完成加载,或者如果你只是想要一个普通的,“Tomcat是runnnig,尽管你的上下文可能不会被完全加载…”
如果是后者,你可以创建一个Web应用程序,它只需要一个上下文监听器,使用Runtime来执行脚本。 如果你方便的话,你可以通过web.xml配置webapp来接受一个指向脚本执行的参数。
就个人而言,我只是看catalinas登录一个特定的字符串取决于你的设置和你寻找什么确切的阶段。
我需要这个从jenkins测试,如果从远程服务器的tomcat启动了系统检查。
until [[ `ssh -o StrictHostKeyChecking=no root@${DEPLOY_HOST} 'netstat -tulpn | grep 8005'` != "" ]] ; do echo "waiting for tomcat"; sleep 6; done