java - 如何获取特定日志文件并在 jenkins 控制台输出中显示其内容

标签 java linux logging jenkins

我有以下 Jenkins 构建后 shell 脚本:

ssh user@my_server <<EOF
  service my_service stop
  service my_service start
  tail -f /opt/services/my_service/logs/current
  exit
EOF

此脚本在远程主机 (my_server) 上重新启动 my_service。

我的问题是:命令 service my_service start 只是向 RUNIT 发出运行 my_service 的请求,即 service my_service start 在执行后立即返回。

但是 service my_service start 运行一个 SpringBoot java web 应用程序,它将所有日志信息写入 .../logs/current 日志文件。为了捕获此日志信息,我添加了命令 tail -f/opt/services/my_service/logs/current 但在这种情况下,Jenkins 构建永远不会结束))例如 tail -f 命令永不停止。

有没有办法执行我的构建后脚本(它只在远程服务器上启动我的网络应用程序)并在 2 分钟内抓取 .../logs/current 日志文件,或者直到这个日志有一行“Web应用程序 MyApplication 已启动”。

我想在 Jenkins 的控制台输出 中查看 .../logs/current 日志文件的内容,并在 2 分钟后杀死 tail -f

最佳答案

tail -f 在被中断之前不会结束,因此您的脚本永远不会结束运行。

你可以做的是在你的日志上使用 grep -q,当它找到它的模式时,它将以 0 退出状态退出:

grep -q 'Web app MyApplication has been Started' <(tail -f /opt/services/my_service/logs/current)

关于java - 如何获取特定日志文件并在 jenkins 控制台输出中显示其内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34466477/

相关文章:

java - 如何在运行时设置 java.net.preferIPv4Stack=true?

linux - 根据头信息计算ELF文件的大小

linux - 如何在Linux中比较两个文件跳过某些特定部分

c++ - 日志记录和多线程

java - 使用内置的 Guice 注入(inject)来注释静态 java.util.Logger 实例的正确习惯用法是什么?

java - 了解 zeromq java 绑定(bind)

java - 输入为int数组,获取所有子集

c++ - 在匹配的内容上丢弃嗅探数据包

在 xen 中记录 xm 控制台输出?

java - 修复 javax.net.ssl.SSLPeerUnverifiedException : No peer certificate