我正在尝试跟踪日志文件并检查服务器启动条件,一旦字符串匹配,它应该在变量中返回相同的 O/P



问题是尾巴 -f 不会自行退出,我的脚本停滞不前。

我正在使用睡眠 15,因为在触发关闭命令字符串"org.apache.coyote.AbstractProtocol"后,日志中出现 15 秒后。通过这种方式,tail -100 工作并给出所需的结果。

下面是我编写的代码片段,它工作正常,但我想通过尾巴 -f 动态检查它。请指导我如何通过尾巴 -f 并以某种方式退出尾巴来做到这一点。

ALFRESCO_LOGS="$CATALINA_BASE/logs"
    printf "Stopping alfresco instance.nn"
    $CATALINA_HOME/bin/shutdown.sh &> /dev/null
    sleep 15
    CHECK_ALFRESCO_LOGS=$(tail -100 $ALFRESCO_LOGS/catalina.out | grep --line-buffered 'org.apache.coyote.AbstractProtocol' | awk 'NR==1{print $NF}')
     echo "$CHECK_ALFRESCO_LOGS"
    if [[ "$CHECK_ALFRESCO_LOGS" == "stop" ]];
    then
            echo "Alfresco instance has been stopped."
    fi

如果你可以接受tail -f接收SIGPIPE,这是一个简单的方法:

while read CHECK_ALFRESCO_LOGS; do
    echo "$CHECK_ALFRESCO_LOGS"
    if [[ "$CHECK_ALFRESCO_LOGS" == "stop" ]]; then
        echo "Alfresco instance has been stopped."
        break
    fi
done < <( tail -f $ALFRESCO_LOGS/catalina.out | awk '/org.apache.coyote.AbstractProtocol/{print $NF}')

当条件匹配时,while 循环结束。这将关闭输入重定向,因此tail进程接收SIGPIPE,从而关闭它。

最新更新