回答:
#!/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
問題を引き起こす可能性があるため、「&」を削除しました。
cp
とmv
ログファイルが一定の限界に達した場合、私は、ログファイルを削除することができ、それは?私の要件がある(、、私はそのログファイルを削除してから、新しいファイルを作成するために、同じ名前で新しいログファイルをお勧めします)
>>
ログファイルに追加するために使用する必要>
があり、何度も何度も上書きします。
>
、tail: test.log: file truncated Hello World!
... >>
が表示されます。を使用すると、正しいログメッセージが表示されますが、ファイルサイズが大きくなります。条件を確認する条件がありません...
使ってみてはsavelog
?
debianとRH、そして私が知っている他のほぼすべてのLinuxディストリビューションで利用可能です。これは/ bin / shシェルスクリプトなので、他のUNIXでも実行する必要があります。
たとえば、test.log
実行するものを書き込む前にsavelog -n -c 7 test.log
。これにより、test.logの最新の空でないバージョンが7つ保持されます。デフォルトでは、ローテーションされたログを圧縮します(ただし、これはで無効にできます-l
)。
必要に応じて、特定のサイズを超えている場合にtest.log
のみサイズを確認できますsavelog
。
savelog
は、ファイルの名前を変更しますが、終了する前に古いファイルをgzipするのに時間がかかることです。その間、.0ログにはすでに翌日のエントリが含まれています。理想的には、ログのローテーションとログを再開するプロセスの通知の間の時間は最小限である必要があります。savelog
このため、圧縮機能を無効にします。
私はこの週末にログローティーを書きました。についてmultilog
@JdeBPのすばらしい回答を読んだとしても、おそらくそうは思わないでしょう。
私はそれが軽量であり、その出力チャンクを次のようにbzip2できることに注目しました:
verbosecommand | logrotee \
--compress "bzip2 {}" --compress-suffix .bz2 \
/var/log/verbosecommand.log
ただし、まだ多くの作業を行い、テストする必要があります。