gpt4 book ai didi

tomcat - 使用 ant : how to know when the application is reloaded? 部署到 tomcat

转载 作者:行者123 更新时间:2023-11-28 23:28:11 25 4
gpt4 key购买 nike

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

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

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

有没有一种方法可以让 Ant 自己解析 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>

因此,在该目标运行后,我知道应用程序已启动,我可以触发下一个将网站置于生产模式的目标。

最佳答案

解决这个问题的非常 hack-ish 的方法是这样的:

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

关于tomcat - 使用 ant : how to know when the application is reloaded? 部署到 tomcat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34266965/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com