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


8

次の形式のログがあります:YYYYMMDD

古いログ(現在より古い)を圧縮し、後で別のディレクトリに移動したいと考えています。

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

回答:


4

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

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

ただ、調整LOGDIROLDLOGDIR。午前12時30分に、すべてのログを前の(ある場合はそれより前の)日のYYYYMMDD形式で移動します。


4
はい、しかしそれは本当に私の質問に答えません。私の質問は、これにlogrotateを使用できるかどうかでした。
サイモン・トス

@Let_Me_Be-それは私の答えに内在していると思いました。いいえ、logrotateは意図したとおりには実行しません。つまり、YYYYMMDDファイルだけを照合することはできません。そうしないと、使用して近くに来ることができるnodateextolddircompress、およびdailyオプション。
unpythonic

3

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週間分のログが保持されます。


1
これは答えではありません。ログには既に日付スタンプが含まれており、効率的にローテーションされます。@jmtdは正しいと思います。
アンドリューlorien 2017

2

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.