クリーンアッププロセスを実行しており、使用しているコマンドは次のとおりです。
find $sentPurgerFolder -mtime +7 -print -delete >> $sentPurgeLogFile 2>&1
このコードは、消去する複数のデータフォルダを持つクライアントを繰り返すwhileループ内にあります。目的は、そのクライアントのフォルダ数に関係なく、すべてのクリーンアップ情報をそのクライアントの単一のログファイルに送信することです。この部分はうまくいくようです。
私が切断したのは、同じ出力をデフォルトのログファイルに送信したいのですが、私が見た「ティー」の例のためにしばらく停止したことです。ログデータを倍増するのではなく、このコマンドを私のコードに統合する方法がわかりません。
誰でも洞察を提供または提案できますか?
ベストアンサー1
find ... 2>&1
それぞれをにパイプしますtee -a "$sentPurgeLogFile"
。これにより、コマンドの出力がfind
valueで指定されたファイルに追加されますが、$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
削除してください。複数のコマンドを実行している場合は、最初のコマンドでのみこれを実行できます。明らかに、スクリプトへのすべての呼び出しの累積ログを保存したくない場合(この場合はループの代わりに使用することもできます)。-a
tee
find
tee
>>master.log
>master.log