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


12

test.sh

#!/bin/bash
echo "Hello World"

test2.sh

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

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

回答:


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

問題を引き起こす可能性があるため、「&」を削除しました。


@Veerendra我々はあなたが無限ループを実行しているとして、ループ内のログをロールのロジックを配置する必要があります...
好奇心が

@Veerendra、以前の投稿でエラーが発生しました。「mv」は新しいファイルを作成しませんが、要件に応じてスクリプトを変更できます。
好奇心が強い

だから、代わりにcpmvログファイルが一定の限界に達した場合、私は、ログファイルを削除することができ、それは?私の要件がある(、、私はそのログファイルを削除してから、新しいファイルを作成するために、同じ名前で新しいログファイルをお勧めします)
ヴェレンドラ

>>ログファイルに追加するために使用する必要>があり、何度も何度も上書きします。
-alcik

を使用すると>tail: test.log: file truncated Hello World!... >>が表示されます。を使用すると、正しいログメッセージが表示されますが、ファイルサイズが大きくなります。条件を確認する条件がありません...
;-(

23

使ってみてはsavelog

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

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

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


どのパッケージにAWS Linuxでこれが含まれているか(CentOSに近いと思いますか)。デフォルトのインストールにはsavelogがありません。デフォルトの
レポジトリ

savelogがRHEL 5に見つかりません。どのリポジトリにあるべきかを知っていますか?
フェリペアルバレス

centosまたはrhel5パッケージについてはわかりませんが、sources.debian.net / src / debianutils / 4.7で/usr/bin/savelogシェルスクリプトを見つけることができます
cas

2
私はsavelogRHEL / CentOS 5/6ボックスのどれも見つけていないので、アドホックにダウンロードしたばかりで、私のニーズにはうまく機能しているようです。
デールアンダーソン

欠点の1つsavelogは、ファイルの名前を変更しますが、終了する前に古いファイルをgzipするのに時間がかかることです。その間、.0ログにはすでに翌日のエントリが含まれています。理想的には、ログのローテーションとログを再開するプロセスの通知の間の時間は最小限である必要があります。savelogこのため、圧縮機能を無効にします。
rustyx

2

私はこの週末にログローティーを書きました。についてmultilog @JdeBPのすばらしい回答を読んだとしても、おそらくそうは思わないでしょう。

私はそれが軽量であり、その出力チャンクを次のようにbzip2できることに注目しました:

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

ただし、まだ多くの作業を行い、テストする必要があります。


0

私はまだにコメントを追加することはできませんとして受け入れ答えBusyBoxののヒント、du持っていない-bフラグ:

du /var/log/file | tr -s '\t' ' ' | cut -d' ' -f1
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.