コマンドの実行中にプロセスからログを読み取ります。

コマンドの実行中にプロセスからログを読み取ります。

ファイルにログを生成するサービスがありますlogs.log

このサービスと対話する他のコマンドがあります。それが一部だとしますfoo.sh

私にとって必要なのは、logs.log実行中にログを正しく切り取って保存することです。foo.shつまり、サービスが私とやり取りするときにサービスログのこの部分が必要です(ログfoo.shは気にしません)。foo.sh

このコマンドはうまくいくことを望みましたが、操作がfoo.sh完了した後でもファイルを読み続けます。

> foo.sh | tail -f logs.log > foo_part.log

このトリックを実行する良い方法はありますか?

ベストアンサー1

これは、バックグラウンドプロセスをバックグラウンドに送信すると非常に簡単になります。

foo.sh &
mypid=$!
tail -f /path/to/logs.log > /path/to/partial.log &
tailpid=$!
wait $mypid
kill -TERM $tailpid

$!バックグラウンドで実行されるように送信された最後のジョブのPIDをキャプチャしてwaitスクリプトで実行し、不要になったときにプロセスを破棄しますkilltail

おすすめ記事