ファイルサイズに基づいてログを分割するBashスクリプト

ファイルサイズに基づいてログを分割するBashスクリプト

Javaプログラムを起動し、システム出力を「出力ファイル」に記録する.bashスクリプトを作成しています。追加記録目的でログ結果を「Archive」zipに保存します。私の現在のスクリプトは次のとおりです...

outfile=/some/log/directory/templog-$(date +%s).log
archive=/some/log/directory/archive.log.gz
java -cp MyJar.jar Logger 2>&1 | tee $outfile | gzip - | cat - >> $archive

私がやりたいことは、一時ファイルのサイズが2 GBに達すると、「outfile2」、「outfile3」などの新しいファイルを作成し、すべての操作が完了すると結果の「outfile」をすべて「archive」に圧縮することです。 '.gzファイル(または別のファイルに圧縮することもできます)

「rotatelogs」と「logrotate」を調べていますが、最善の選択が何であるかわからないようです。私はLinux世界の初心者なので、助けてくれてありがとう。

答え1

あなたができることは、事前に圧縮するのではなくlogrotateを使って圧縮できることです。あなたはログの回転ファイルは数分ごとにcronを介してトリガーできます。クローンはファイルサイズを確認し、回転して圧縮します。

または、次のものを使用できます。分ける注文する。このコマンドは、サイズまたは行数に基づいてファイルを分割できます。これにより、次のコマンドが提供されます。

java -cp MyJar.jar Logger 2>&1 | tee $outfile | gzip | split -m 2048m archive 

teeから始まり、データ/出力はgzipに移動してデータを圧縮し、そのデータは分割に移動し、サイズが2Gbに達すると出力を分割します。

関連情報