部署到tomcat 7的我的Spring MVC应用程序的当前ant构建过程如下(每一步都是目标):
我的问题是目标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 "${LOGLINE}"; [[ "${LOGLINE}" == *"Servlet context initialized"* ]] && echo ${password}|sudo -S pkill -u root tail; done" failonerror="false" trust="true" />
</target>
因此,在运行此目标后,我知道应用程序已启动,我可以触发将该站点置于生产模式的下一个目标。
答案 0 :(得分:0)
很难解决这个问题的方法就是这样: