ディレクトリとそのサブディレクトリ内のファイルのログローテーション


回答:


87

サブディレクトリの深さはどれくらいですか?

/var/log/basedir/*.log /var/log/basedir/*/*.log {
    daily
    rotate 5
}

すべて回転します.logの BASEDIR /内のファイルだけでなく、すべての.log BASEDIRのいずれかの直接の子でファイルを。さらに1レベル深くする必要がある/var/log/basedir/*/*/*.log場合は、各レベルがカバーされるまで別のレベルを追加します。

これは、満たされない制約(最小サイズが大きい)を含む個別のlogrotate構成ファイルを使用してテストでき、それから詳細モードで自分でlog rotateを実行します。

logrotate -d testconfig.conf

-dフラグは、ローテーションを検討している各ログファイルをリストします。


6
ありがとう!-d実際にlogrotateをドライランモードにする(つまり、実際には何も変更しない)ように見えます。
ithinkihaveacat

1
実際には直接関連性はありませんが、おそらく誰かに役立つでしょう。この-fオプションは、logrotateに「強制実行」を指示します。コマンドの最後の裸の単語は、デフォルトの代わりに使用する設定ファイルです。そのlogrotate -f /some/config手段は、configファイルは、それがまだ実行する時間はないと言っている場合でも、その設定ファイルを使用して実行し、常に実行します。私の未熟な目と、それを使ってcronジョブを投入した私の前任者にとっては-f、設定ファイルを指定するだけのようでした。かなり紛らわしい。
ダンプリッツ

4

私の場合、サブディレクトリの深さは警告なしに変更される可能性があるため、bashスクリプトを設定してすべてのサブディレクトリを検索し、各ディレクトリの構成エントリを作成します。

また、ローテーション後にサブディレクトリの構造を維持することも重要です。ワイルドカード(つまり@DanRの答え)はそうではなかったようです。毎日ログのローテーションを行う場合、このスクリプトを毎日のcronジョブに入れることができます。

basedir=/var/log/basedir/
#destdir=${basedir} # if you want rotated files in the same directories
destdir=/var/log/archivedir/ #if you want rotated files somewhere else
config_file=/wherever/you/keep/it
> ${config_file} #clear existing config_file contents

subfolders = $(find ${basedir} -type d)

for ii in ${subfolders}
do
    jj=${ii:${#basedir}} #strip off basedir, jj is the relative path

    #append new entry to config_file
    echo "${basedir}${jj}/* {
        olddir ${destdir}${jj}/
        daily
        rotate 5
    }" >> ${config_file}

    #add one line as spacing between entries
    echo "\n" >> ${config_file}

    #create destination folder, if it doesn't exist
    [ -d ${destdir}${jj} ] || mkdir ${destdir}${jj}
done

@DanRが提案したように、テスト logrotate -d


1

古いスレッドですが、次のことができます。

/var/log/basedir/**/*.log {
    daily
    rotate 5
}

これらの2つの星は、ゼロ個以上のディレクトリに一致します。ただし、すでにローテーションされているファイルをローテーションできるため、ローテーションするログファイルの定義方法に注意する必要があります。ここでlogrotateのマニュアルを引用します。

ワイルドカードは注意して使用してください。*を指定すると、logrotateは、以前に回転したファイルを含むすべてのファイルを回転します。これを回避する方法は、olddirディレクティブまたはより正確なワイルドカード(* .logなど)を使用することです。


3
このワイルドカードパターンは、私にとってはうまくいきませんでした。RHEL 7.3でのLogrotate 3.8.6
northben

たぶん、globstarlogrotateを実行する前に有効にする必要があります。これにより、bashが有効になりshopt -s globstarます。
bat_ventzi

私は同じ問題を抱えています。Ubuntu 16.04.3でのLogrotate 3.8.7。ls /var/log/basedir/**/*.logは説明どおりに機能しますが、logrotateは機能しません。
frogstarr78

logrotate 3.11.0では、私にとっても機能しません。bashの展開は、logrotateワイルドカードとは関係ないと思います。(同様の構文を除く)
Thayne
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.