各ファイルループは並列に発生しますか?

各ファイルループは並列に発生しますか?

いくつかのログファイルを継続的に監視したいと思います。tail -Fforを切り替えると、以下の内容が機能しますcat $log_file。最初のログファイルを使用すると-tail -F機能しますが、プロセスが完了しないため、トップwhileループがブロックされます。

while read log_file各ログファイルに対して外部から1つのプロセスが開始されるように、各プロセスをバックグラウンドで実行するにはどうすればよいですか。(また、&あちこちで内部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

このソリューションはawktailの出力を解析し、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

おすすめ記事