java - 发现异常或服务器正在运行时自动停止 "tail -f catalina.out"

标签 java python shell tail

我已经为我的网络应用程序设置了一个自动部署脚本(在 shell 脚本中)。

它使用 java、tomcat、maven 和 postgres 数据库。

部署脚本这样做:

  1. 从源存储库构建可部署的应用程序
  2. 停止tomcat
  3. 应用数据库迁移补丁
  4. 在 tomcat 中部署 war 文件
  5. 启动 tomcat(通过调用 $TOMCAT_HOME/bin/startup.sh)
  6. 退出并显示成功消息

一切正常,而且非常整洁 - 但需要一点改进。 您会看到,即使它退出并显示成功消息,有时部署也不会成功,因为 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/

相关文章:

java - 更改 ArrayList 中元素顺序的最快方法是什么?

mysql - 在 MySQL 数据库中备份新数据

python - 在 PyQt 中将 Label 字体大小与布局同步

python - PyQt- 哪一列获得了右键单击?

python - 如何从包 init.py 导入

regex - 查找多次出现的单词

git - 为什么 git branch 和 $(git branch) 输出不同的结果

Java柏林噪声

java - JUnit 测试 SQL 查询

java - 为什么在 this 方法中添加一个 If 语句会大大降低它的速度?