【发布时间】:2019-12-19 22:36:40
【问题描述】:
我正在实现monitor_log 函数,该函数将从运行日志中跟踪最新行并使用while循环检查所需的字符串,超时逻辑应该是当尾部日志运行超过300秒时,它必须关闭尾部和while循环管道。
我发现的大问题是对于某些服务器,运行日志NOT 不断生成,这意味着tail -n 1 -f "running.log" 也将NOT 为while 循环生成输出以供使用,因此超时检查逻辑if [[ $(($SECONDS - start_timer)) -gt 300 ]] 不会正确命中。
例如我将300 秒设置为超时,但如果running.log 在300 秒之前停止生成新行并且在30 分钟内没有新行,tail 将不会在30 分钟内生成新输出,因此while 循环中的超时检查逻辑不会在30 分钟内命中,因此即使在300 秒后它也会保持拖尾并且不会中断,如果没有来自@987654334 的新行@forever,超时检查逻辑不会永远命中。
function monitor_log() {
if [[ -f "running.log" ]]; then
# Timer start
start_timer=$SECONDS
# Tail the running log last line and keep check required string
tail -n 1 -f "running.log" | while read tail_line
do
if [[ $(($SECONDS - start_timer)) -gt 300 ]]; then
break;
fi
if [[ "$tail_line" == "required string" ]]; then
capture_flag=1
fi
if [[ $capture_flag -eq 1 ]]; then
break;
fi
done
fi
}
您能帮忙找出在300 秒时使尾部和while 循环超时的正确方法吗?谢谢。
【问题讨论】:
标签: linux bash shell while-loop timeout