Logrotateのmanページから:
minsizesize
ログファイルは、sizeバイトより大きくなるとローテーションされますが、追加で指定された時間間隔(毎日、毎週、毎月、または毎年)の前ではローテーションされません。関連するサイズオプションは、時間間隔オプションと相互に排他的であることを除いて同様です。最後のローテーション時間に関係なくログファイルがローテーションされます。 minsizeを使用すると、ログファイルのサイズとタイムスタンプの両方が考慮されます。サイズサイズ
ログファイルがsizeバイトより大きくなると、ローテーションされます。 sizeの後にkが続く場合、サイズはキロバイト単位であると想定されます。 Mを使用する場合、サイズはメガバイト単位であり、Gを使用する場合、サイズはギガバイト単位です。したがって、サイズ100、サイズ100k、サイズ100M、サイズ100Gはすべて有効です。
sizeを5Mとして設定し、intervalをweeklyとして設定すると、ログは毎週ローテーションされ、ログのサイズが5Mを超えると追加のローテーションが発生します。しかし、何が起こるかというと、5Mを超えない限り、ログはローテーションされません。これは、minsizeが行うことになっているようです。
マニュアルを間違って解釈していますか?ログを毎週ローテーションさせ、5Mを超える場合はどうすればよいですか?
編集:
次の情報が関連しているかどうかはわかりませんが、補足するだけです。
私はrsyslogを使用して、メッセージ、セキュア、cron、メールログ、ブートのメインロギングを実行しています。最後から2番目のログのローテーション日付とファイルサイズは、上記のようにサイズと間隔が設定されています。
filename rotation date file size
messages 20130129 5.3MB
secure 20130113 5.1kB
cron 20130113 3.6kB
maillog 20130113 1.1kB
ご覧のとおり、ローテーションされるのはメッセージのみです。
EDIT2:
man logrotate
で確認する必要があります。彼らは実際にmaxsizeオプションでそれをアップグレードしました。これは私が探しているものでなければなりません:
maxsizesize
追加で指定された時間間隔(毎日、毎週、毎月、または毎年)の前であっても、サイズがバイトより大きくなると、ログファイルがローテーションされます。関連するサイズオプションは、時間間隔オプションと相互に排他的であることを除いて同様です。最後のローテーション時間に関係なくログファイルがローテーションされます。 maxsizeを使用すると、ログファイルのサイズとタイムスタンプの両方が考慮されます。
ここでいくつかの質問に回答します: logrotate daily and size?
通常、logrotate
は1日に1回だけ実行されるため、サイズ制限は正確に守られません。 logrotate
のステータスファイル(おそらく/var/lib/logrotate.status
)は日付(時間ではなく)のみを保存します。これは、頻繁に使用することを目的としていないため、ファイルを頻繁にローテーションすることはできません(Update:バージョン3.85が追加毎時サポートし、完全なタイムスタンプを状態ファイルに保存します。)
使用しているsyslogd
はわかりません。rsyslogおよびsyslog-ngは自己管理をサポートしていますサイズベースのローテーション。したがって、サイズごとにローテーションし、logrotate
を毎週ローテーションさせることができるはずです(ただし、ファイルの同時ローテーションによって誤って何かが削除されないようにするために、ファイルの命名にはいくつかの考えが必要になる場合があります) )。
他のオプションの1つは、Apacheと同じようにパイプされたログを使用することです。実際、Apache-2.4のrotatelogs
は、この機能を正確にサポートします(以前のバージョンは、サイズまたは時間のみを個別にサポートしていました)。ログがどこから発生したかはわかりませんが、パイプまたはfifoにログを記録し、サポートされている場合はrotatelogs
を使用できる場合があります。
logrotate
<= v3.8.0の場合、サポートされる3つのシナリオは次のとおりです。
logrotate-3.8.1
追加:
logrotate
をデフォルトよりも1日に1回実行する必要がある場合があります。logrotate-3.8.5
追加:
logrotate
を実行する必要があります。