テストファイル
#!/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.log
、savelog
特定のサイズを超える場合にのみ確認できます。
答え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