stdoutとstderrを複数のログファイルに送信する最良の方法は何ですか?

stdoutとstderrを複数のログファイルに送信する最良の方法は何ですか?

クリーンアッププロセスを実行しており、使用しているコマンドは次のとおりです。

find $sentPurgerFolder -mtime +7 -print -delete >> $sentPurgeLogFile 2>&1

このコードは、消去する複数のデータフォルダを持つクライアントを繰り返すwhileループ内にあります。目的は、そのクライアントのフォルダ数に関係なく、すべてのクリーンアップ情報をそのクライアントの単一のログファイルに送信することです。この部分はうまくいくようです。

私が切断したのは、同じ出力をデフォルトのログファイルに送信したいのですが、私が見た「ティー」の例のためにしばらく停止したことです。ログデータを倍増するのではなく、このコマンドを私のコードに統合する方法がわかりません。

誰でも洞察を提供または提案できますか?

ベストアンサー1

find ... 2>&1それぞれをにパイプしますtee -a "$sentPurgeLogFile"。これにより、コマンドの出力がfindvalueで指定されたファイルに追加されますが、$sentPurgeLogFile同じ出力がループの標準出力に送信されますwhile

ループの出力をwhile「マスター」ログファイルにリダイレクトします。

while ...; do

    # find commands here, e.g.
    find "$sentPurgerFolder" -mtime +7 -print -delete 2>&1 | tee -a "$sentPurgeLogFile"

done >master.log

これにより、各クライアントの出力を独自のログファイルに保存し、同時にすべての出力をmaster.log

whileループが単一のループを実行しているのか、複数のループを実行しているのかはわかりませんfind。 Singleを実行している場合は、コマンドが実行されるたびにそのクライアントの新しいログファイルを生成するオプションをfind削除してください。複数のコマンドを実行している場合は、最初のコマンドでのみこれを実行できます。明らかに、スクリプトへのすべての呼び出しの累積ログを保存したくない場合(この場合はループの代わりに使用することもできます)。-ateefindtee>>master.log>master.log

おすすめ記事