我想持续监控一些日志文件。如果我切换tail -F
for ,我下面的内容就会起作用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