多くのログファイルをローテーションごとに異なるサブディレクトリにローテーションするにはどうすればよいですか?


11

多くのログファイルを含むディレクトリがあり、そのすべてを毎日ローテーションしたいです。組織的な目的のために、ログの最後の週を保持しながら、日付によって名前が付けられた別のディレクトリ(またはサブディレクトリ)にローテーションされたログを移動できるようにしたいと思います。

logrotateを使用して、ファイルをその場でローテーションするか、olddirディレクティブを使用して単一の異なるディレクトリに移動することでこれを実現できますが、ローテーションごとに個々のサブディレクトリを作成するための解決策を見つけるのに苦労しています。どうすればこれを達成できますか?:

Logs to rotate: /var/log/example/*

Desired target directories (keeping a week):
    /var/log/example/20121006/*
    [ ... ]
    /var/log/example/20121012/*

回答:


8

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)両方のディレクティブの詳細を参照してください。


postrotateトリックを行うようです。追加する必要があるのは、特定の数を超えているか、特定の日付より古い古いディレクトリを削除することだけです。
デイブフォーガック

1
更新された回答を参照してください。このfind | xargsコマンドは/var/log/example、7日以上前に最後に変更された場合、直下のすべてのサブディレクトリを削除する必要があります。
アンスガーウィーチャーズ

1

あなたは持っているolddirあなたが設定ファイルで使用できるディレクティブ。

ドキュメントから:

olddir
ログはローテーションのためにディレクトリに移動されます。ディレクトリは、ローテーションされるログファイルと同じ物理デバイス上にある必要があり、絶対パス名が指定されていない限り、ログファイルを保持するディレクトリに相対的であると見なされます。このオプションを使用すると、すべての古いバージョンのログがディレクトリに保存されます。このオプションは、noolddirオプションによってオーバーライドされる場合があります。

参照https : //manpages.debian.org/jessie/logrotate/logrotate.8.en.html

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