我已经为我的网络应用程序设置了一个自动部署脚本(在 shell 脚本中)。
它使用 java、tomcat、maven 和 postgres 数据库。
部署脚本这样做:
- 从源存储库构建可部署的应用程序
- 停止tomcat
- 应用数据库迁移补丁
- 在 tomcat 中部署 war 文件
- 启动 tomcat(通过调用 $TOMCAT_HOME/bin/startup.sh)
- 退出并显示成功消息
一切正常,而且非常整洁 - 但需要一点改进。 您会看到,即使它退出并显示成功消息,有时部署也不会成功,因为 Web 应用程序未正确启动。
我想重构第 5 步和第 6 步,以便在启动 tomcat 服务器后,部署脚本将在 catalina.out 文件中“tail -f”,查找“服务器成功启动”消息或异常堆栈跟踪。
到目前为止的 tail -f 输出应该是部署脚本输出的一部分,因此第 6 步将相应地“exit 0”或“exit 1”。
我知道这应该是可能的,如果不是在 shell 脚本中,也许是 python。 问题是我是一名 Java 专家——我所说的专家是指我对其他一切都很糟糕:-)
请帮忙? :-)
最佳答案
也许是这样的?
tmp=$(mktemp -t catalina.XXXXXXX) || exit 136
trap 'rm "$tmp"' 0
trap 'exit 255' 2 15
tail -n 200 catalina.out >"$tmp"
if grep -q error "$tmp"; then
cat "$tmp"
exit 1
fi
exit 0
另一方面,如果 startup.sh
编码得当,您可以
if startup.sh; then
tail -f catalina.out
else
exit $?
fi
可以缩短为
startup.sh || exit $?
tail -f catalina.out
关于java - 发现异常或服务器正在运行时自动停止 "tail -f catalina.out",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10747953/