使用ant部署到tomcat:如何知道应用程序何时重新加载



部署到tomcat 7的Spring MVC应用程序的当前ant构建过程如下(每个步骤都是一个目标):

  1. 将网站置于维护模式(这指示服务器上的nginx显示一个静态的"维护"页面,而不是加载tomcat应用程序)
  2. 将war复制到webapps目录下的web服务器
  3. 等待tomcat重新加载应用程序
  4. 将站点恢复到生产模式(即,恢复点1)

我的问题是目标3;我必须手动观察tail -f /var/log/tomcat7/catalina.out的输出,直到它显示消息说应用程序已重新加载。然后我必须手动启动目标执行第4点。

蚂蚁自己有没有办法解析tail -f的输出,如果出现某条消息,停止第3号任务,自动转到第4号任务?

注意:我仍然希望在控制台中看到tail -f的输出(如果有错误,调试信息是有用的),我只是希望它停止并进入下一个目标,如果一切都加载正确的话。

编辑:

一个小更新,说我找到了一个令人满意的解决方案。以下ant目标将跟踪catalina.out文件,打印控制台中的行,并在输出中出现"Servlet context initialized"字样时退出命令(这是我的应用程序在初始化时打印到系统输出的消息)。

<target name="tail catalina.out DEV until restart" depends="Get credentials for DEV">
    <property name="tailtime" value="4" />
    <sshexec host="${dev}" username="${username}" password="${password}" command="echo ${password}| sudo -S tail --lines=1 -f /var/log/tomcat7/catalina.out | while read LOGLINE; do echo &quot;${LOGLINE}&quot;;  [[ &quot;${LOGLINE}&quot; == *&quot;Servlet context initialized&quot;* ]] &amp;&amp; echo ${password}|sudo -S pkill -u root tail; done" failonerror="false" trust="true" />
</target>

因此,在这个目标运行后,我知道应用程序已经启动,我可以启动下一个目标,使站点进入生产模式。

解决这个问题的非常破解的方法是这样的:

  1. 我不知道如何在Spring中做到这一点,但你能创建一些简单的bean,并在所有重负载成功完成后强制它初始化吗。该bean可能只是接触了一些文件(例如/run/shm/reload-nginx)
  2. 每次/run/shm/reload nginx修改日期更改时,inotify都会触发您的脚本,例如通过http://linux.die.net/man/1/inotifywait

相关内容

  • 没有找到相关文章

最新更新