logrotate
ディレクトリとそのすべてのサブディレクトリ内のログファイルを考慮することは可能ですか?(つまり、サブディレクトリを明示的にリストしません。)
logrotate
ディレクトリとそのすべてのサブディレクトリ内のログファイルを考慮することは可能ですか?(つまり、サブディレクトリを明示的にリストしません。)
回答:
サブディレクトリの深さはどれくらいですか?
/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フラグは、ローテーションを検討している各ログファイルをリストします。
-f
オプションは、logrotateに「強制実行」を指示します。コマンドの最後の裸の単語は、デフォルトの代わりに使用する設定ファイルです。そのlogrotate -f /some/config
手段は、configファイルは、それがまだ実行する時間はないと言っている場合でも、その設定ファイルを使用して実行し、常に実行します。私の未熟な目と、それを使ってcronジョブを投入した私の前任者にとっては-f
、設定ファイルを指定するだけのようでした。かなり紛らわしい。
私の場合、サブディレクトリの深さは警告なしに変更される可能性があるため、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
古いスレッドですが、次のことができます。
/var/log/basedir/**/*.log {
daily
rotate 5
}
これらの2つの星は、ゼロ個以上のディレクトリに一致します。ただし、すでにローテーションされているファイルをローテーションできるため、ローテーションするログファイルの定義方法に注意する必要があります。ここでlogrotateのマニュアルを引用します。
ワイルドカードは注意して使用してください。*を指定すると、logrotateは、以前に回転したファイルを含むすべてのファイルを回転します。これを回避する方法は、olddirディレクティブまたはより正確なワイルドカード(* .logなど)を使用することです。
globstar
logrotateを実行する前に有効にする必要があります。これにより、bashが有効になりshopt -s globstar
ます。
-d
実際にlogrotateをドライランモードにする(つまり、実際には何も変更しない)ように見えます。