多くのログファイルを含むディレクトリがあり、そのすべてを毎日ローテーションしたいと考えています。整理の目的で、ローテーションされたログを、日付の名前が付けられた別のディレクトリ(またはサブディレクトリ)に移動して、ログの最後の週を保持できるようにしたいと考えています。
Logrotateを使用して、ファイルをインプレースでローテーションするか、olddir
ディレクティブを使用して単一の異なるディレクトリに移動することで、これのほとんどを達成できますが、個々のサブディレクトリを回転。どうすればこれを達成できますか?:
Logs to rotate: /var/log/example/*
Desired target directories (keeping a week):
/var/log/example/20121006/*
[ ... ]
/var/log/example/20121012/*
postrotate
ディレクティブで外部スクリプトを呼び出すことができるはずです。
_postrotate
/path/to/your.sh
endscript
_
そして、そのスクリプトに移動を行わせます、例えば:
_#!/bin/bash
newdir=/var/log/example/`date +%Y%m%d`
mkdir $newdir
mv /var/log/example.1.gz $newdir
find /var/log/example -mindepth 1 -maxdepth 1 -mtime +7 \
-type d -print0 | xargs -0 rm -rf
_
ただし、dateext
ディレクティブを使用する方が簡単な場合があります。これにより、ローテーションされたファイルにはタイムスタンプが追加されます(別のディレクトリに移動されません)。
両方のディレクティブの詳細については、logrotate(8)
を参照してください。
設定ファイルで使用できるolddir
ディレクティブがあります。
ドキュメントから:
olddir
ログはローテーションのためにディレクトリに移動されます。ディレクトリは、ローテーションされるログファイルと同じ物理デバイス上にある必要があり、絶対パス名が指定されていない限り、ログファイルを保持するディレクトリからの相対パスと見なされます。このオプションを使用すると、古いバージョンのログはすべてディレクトリに保存されます。このオプションは、noolddir
オプションによってオーバーライドされる場合があります。
リファレンス: https://manpages.debian.org/jessie/logrotate/logrotate.8.en.html