web-dev-qa-db-ja.com

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

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

Logrotateを使用して、ファイルをインプレースでローテーションするか、olddirディレクティブを使用して単一の異なるディレクトリに移動することで、これのほとんどを達成できますが、個々のサブディレクトリを回転。どうすればこれを達成できますか?:

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

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

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)を参照してください。

9
Ansgar Wiechers

設定ファイルで使用できるolddirディレクティブがあります。

ドキュメントから:

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

リファレンスhttps://manpages.debian.org/jessie/logrotate/logrotate.8.en.html

1