Linux Makefile命令后检查日志的最佳方法

Linux Makefile命令后检查日志的最佳方法,linux,bash,unix,testing,makefile,Linux,Bash,Unix,Testing,Makefile,我的一个项目的Makefile在一个无头浏览器上为功能测试步骤运行了一系列测试。大部分测试是针对前端代码的,但我也会检查后端是否有任何错误/警告 目前,我们正在清理web服务器日志,运行所有(非常慢的)测试,然后对服务器日志中的任何错误或警告进行grepping 我想知道是否有办法让侦听器从后台开始解析日志(例如,tail-f | grep),并在测试运行期间检测到任何错误/警告时杀死make目标 到目前为止,我得到的是 在后台启动长寿命grep并存储PID 运行测试 检查长寿命grep的输出

我的一个项目的Makefile在一个无头浏览器上为功能测试步骤运行了一系列测试。大部分测试是针对前端代码的,但我也会检查后端是否有任何错误/警告

目前,我们正在清理web服务器日志,运行所有(非常慢的)测试,然后对服务器日志中的任何错误或警告进行grepping

我想知道是否有办法让侦听器从后台开始解析日志(例如,
tail-f | grep
),并在测试运行期间检测到任何错误/警告时杀死make目标

到目前为止,我得到的是

  • 在后台启动长寿命grep并存储PID
  • 运行测试
  • 检查长寿命grep的输出
  • 杀死PID
  • 如果出现任何错误,请失败
  • 这只为我带来了一个优势,即现在我不会每次都丢失dev box上的服务器日志,因为我不必每次都清理它。但是我仍然需要等待很长的时间(分钟),等待第一次出现的故障

    有什么解决办法吗

    我想知道是否有办法让侦听器从后台开始解析日志(例如,
    tail-f | grep
    ),并在测试运行期间检测到任何错误/警告时杀死make目标

    你试过用简单直接的方法吗?比如说:

    # make is started somehow, e.g.:
    make target >make-target.log 2>&1 &
    PIDOFMAKE=$!
    # we know its PID and the log file name
    
    tail -f make-target.log | grep 'ERROR!' |
    while read DUMMY; do
        # error was detected, kill the make:
        kill $PIDOFMAKE
        break
    done
    

    (虽然我不清楚OP在问什么,但我正在写一个答案,因为我不能在评论中加入很多代码。)

    使用比
    grep更灵活的方法?像
    awk
    或者插入最喜欢的脚本语言,可以在匹配发生时对其运行任意命令?@EtanReisner那应该没问题,我真的不在乎grep。但在make将日志消息放在后台之后,如何从awk或任何东西捕获日志消息仍然不清楚。嗯?awk可以在处理其输入时直接执行命令,并且可以在需要时退出。@EtanReisner Make依赖于它开始决定是否失败的命令的返回值。如果我在后台运行一个命令来运行其他命令,则无法返回值。而那个能启动其他命令的后台程序也帮不了我。或者我不知道会发生什么…@gcb,我想你很清楚该怎么做。技术解决方案如第3段所述。您真正的问题是需要更多的shell脚本编写经验。或者更好——Python/Perl/etc脚本。我不关心make的输出。我关心命令之外的日志。例如:我想在make文件中对web应用程序运行测试时检查
    日志/apache.err
    。当我运行测试时,
    tail-f logs/apache.err | grep ERROR
    将运行
    selenium测试…