每个文件循环都并行进行吗?

每个文件循环都并行进行吗?

我想持续监控一些日志文件。如果我切换tail -Ffor ,我下面的内容就会起作用cat $log_file。当我使用-tail -F第一个日志文件时,它可以工作,但因为它的进程没有完成,所以它阻塞了顶部while循环。

如何在后台运行每个进程,以便外部while read log_file为每个日志文件启动一个进程?(还尝试&在各个地方添加内部 while 循环的背景)

ls /var/log/myApp-*.log | while read log_file ; do
  tail -F $log_file while read log ; do
    echo send $log to external tracker for $log_file if X
  done
done

答案1

该解决方案用于awk解析 tail 的输出,并在system()检测到事件时调用命令。

另外,您可能希望避免解析 的输出ls并使用 globbing 来代替。

for log_file in /var/log/myApp-*.log; do 
    tail -F $log_file | awk '{l=gensub(/.+\"level\": ([0-9]+).+/,"\\1","g",$0); if(l>50 && l!= $0){system("echo command")}}' &
done

相关内容