web-dev-qa-db-ja.com

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

test.sh

#!/bin/bash
echo "Hello World"

test2.sh

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

Logrotateを実装してログファイルのサイズを制御したいので、上記のような状況でlogrotateを実装するにはどうすればよいですか?

12
#!/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

問題の原因となる可能性があるため、「&」を削除しました。

11
curious

savelogの使い方は?

これは、debianとRH、そして私が知っているほとんどすべてのLinuxディストリビューションで利用できます。これは/ bin/shシェルスクリプトなので、他のUNIXでも実行できます。

例えば何かをtest.logに書き込む前に、savelog -n -c 7 test.logを実行します。これにより、test.logの最新の空でない7つのバージョンが保持されます。デフォルトでは、ローテーションされたログが圧縮されます(ただし、-lで無効にできます)。

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

24
cas

logrotee を今週末に書きました。 @JdeBPの multilogについてのすばらしい答え を読んだ場合、おそらく私はそうは思いません。

私はそれが軽量で、その出力チャンクを次のようにbzip2できることに焦点を当てました:

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

ただし、まだ完了していないことがたくさんあります。

2

受け入れられた回答BusyBoxヒントにコメントを追加することはまだできないので、duには-b 国旗:

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