いくつかのログファイルを継続的に監視したいと思います。tail -F
forを切り替えると、以下の内容が機能します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
このソリューションは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