シェルスクリプトでlogrotateを実装する方法

シェルスクリプトでlogrotateを実装する方法

テストファイル

#!/bin/bash
echo "Hello World"

test2.sh

#!/bin/bash
while true
do
    sh test.sh >> /script_logs/test.log &
done

logrotateを実装してログファイルのサイズを変更したいのですが、上記のような場合はlogrotateを実装する方法を教えてください。

答え1

試してみてはいかがでしょうかsavelog

これはDebianとRH、そして私が知っている他のほとんどすべてのLinuxディストリビューションで動作します。これは/bin/shシェルスクリプトなので、他のUnixでも実行する必要があります。

test.logたとえば、runを書く前にsavelog -n -c 7 test.log。これにより、test.logの空でない最新の7つのバージョンが維持されます。デフォルトでは、回転したログを圧縮します(ただし、これを使用して無効にすることができます-l)。

必要に応じてサイズを確認しtest.logsavelog特定のサイズを超える場合にのみ確認できます。

答え2

#!/bin/bash 
touch /script_logs/test.log
MaxFileSize=2048
while true
do
     sh test.sh >> /script_logs/test.log
#Get size in bytes** 
    file_size=`du -b /script_logs/test.log | tr -s '\t' ' ' | cut -d' ' -f1`
    if [ $file_size -gt $MaxFileSize ];then   
        timestamp=`date +%s`
        mv /script_logs/test.log /script_logs/test.log.$timestamp
        touch /script_logs/test.log
    fi

done

問題が発生する可能性があるため、「&」を削除しました。

答え3

私は書いたログロティ今週末。 @JdeBPの記事を読んだら、おそらくそうしなかったでしょう。に対する素晴らしい答えmultilog

私は軽くて出力チャンクをbzip2できることに焦点を当てました。たとえば、次のようになります。

verbosecommand | logrotee \
  --compress "bzip2 {}" --compress-suffix .bz2 \
  /var/log/verbosecommand.log

しかし、まだやるべきこととテストすることはたくさんあります。

答え4

まだコメントを追加できないから受け入れられた回答、ㅏ忙しい箱ヒント:ここにフラグduはありません。-b

du /var/log/file | tr -s '\t' ' ' | cut -d' ' -f1

関連情報