logrotateを使用して1日(指定された日付)ログを圧縮できますか?

logrotateを使用して1日(指定された日付)ログを圧縮できますか?

私のログ形式は次のとおりです。YYYYMMDD

古いログ(現在の日付より古い)を圧縮してから、別のディレクトリに移動したいと思います。

logrotateでこれを行うことはできますか?それとも、cronでカスタムスクリプトを使用する必要がありますか?

答え1

ログファイル名が実行されるたびに同じで日付を追加できる場合、logrotateはolddirを使用してこれを実行できます。ログファイル名がYYYYMMDDに変更された場合、logrotateはこれを実行しません。

# sample logrotate conf file
copytruncate
compress
dateformat %Y%m%d.
dateext
extension log
olddir ./logarchive

/logs/sys.log {
    rotate 7
    daily
}

/logs/sys.log を /logs/logarchive/sys.20120101.log.gz にコピーして gzip して、1 週間分のログをアーカイブします。

答え2

以下は、必要なタスクを実行するクイックスクリプトです。

#!/bin/bash
LOGDIR=/var/log/somedir
OLDLOGS=/var/log/keep-old-logs-here
PATH=/bin:$PATH
TODAY=$(date +'%Y%m%d')

[ -d $OLDLOGS ] || mkdir -p $OLDLOGS

cd $LOGDIR

for LOG in $(ls | egrep '^[[:digit:]]{8}$'); do
    [ $LOG -lt $TODAY ] && gzip $LOG && mv $LOG.gz 
done

スクリプトを実行可能にします。

$ chmod +x /where/you/put/this/script

crontabエントリは次のとおりです。

30 0 * * * /where/you/put/this/script

LOGDIR合計を調整するだけですOLDLOGDIR。午後12時30分に、前の日付(および可能であれば前の日付)のすべてのログをYYYYMMDD形式に移動します。

答え3

logrotateそれ自体はこれを行いません。補足スクリプトを作成し、設定のオプションを使用してlogrotate呼び出すことをお勧めします。postrotate

関連情報