3

同時にいくつかのリモート ファイルを追跡し、ファイルの統計情報を同時に集計することに興味があります。これまでのところ、次のようにしています。

mkfifo mfifo
ssh -ft host1 'tail -f /path/to/log | grep something' > mfifo &
ssh -ft host2 'tail -f /path/to/log | grep something' > mfifo &
ssh -ft host3 'tail -f /path/to/log | grep something' > mfifo &
cat mfifo | awk '{x += $4; print $3} END {printf "total: %d", x}'

これは、awk を介してストリーミングされた grep されたログの集約により、ほとんど期待どおりに機能します。ただし、最終的な合計を印刷する方法がわかりません。fifo のライターを閉じる必要があると思いますが、これを行う方法がわかりません。ストリーム全体をファイルとして保存せずにこれを行う方法に関する提案はありますか?

4

1 に答える 1

2

FIFO ライターの強制終了

fuserを使用して、ファイルに書き込みを行っているプロセスを強制終了できます。例えば:

fuser -TERM -k -w mfifo; sleep 5; fuser -k -w mfifo

fuser はデフォルトで SIGKILL を送信することに注意してください。したがって、この例では、明示的な SIGTERM を送信し、プロセスを強制的に終了する前に 5 秒間待機します。これにより、プロセスのクリーンアップが可能になりますが、呼び出しを自由に調整してください。

また、fuser が書き込みアクセス権を持つプロセスのみを強制終了するように、-w フラグを渡していることに注意してください。このフラグがないと、catawkも殺されます。

于 2012-06-28T06:29:53.373 に答える