web-dev-qa-db-ja.com

ログが特定のサイズを超えない限り、間隔に基づいてログをローテーションする方法は?

Logrotateのmanページから:

minsizesize
ログファイルは、sizeバイトより大きくなるとローテーションされますが、追加で指定された時間間隔(毎日、毎週、毎月、または毎年)の前ではローテーションされません。関連するサイズオプションは、時間間隔オプションと相互に排他的であることを除いて同様です。最後のローテーション時間に関係なくログファイルがローテーションされます。 minsizeを使用すると、ログファイルのサイズとタイムスタンプの両方が考慮されます。

サイズサイズ
ログファイルがsizeバイトより大きくなると、ローテーションされます。 sizeの後にkが続く場合、サイズはキロバイト単位であると想定されます。 Mを使用する場合、サイズはメガバイト単位であり、Gを使用する場合、サイズはギガバイト単位です。したがって、サイズ100、サイズ100k、サイズ100M、サイズ100Gはすべて有効です。

size5Mとして設定し、intervalweeklyとして設定すると、ログは毎週ローテーションされ、ログのサイズが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を使用すると、ログファイルのサイズとタイムスタンプの両方が考慮されます。

21

ここでいくつかの質問に回答します: 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つのシナリオは次のとおりです。

  1. size経過時間に関係なく、最大で1日1回サイズでローテーション
  2. timeperiodサイズに関係なく、無条件にtimeperiodだけローテーションします
  3. minsizetimeperiodログファイルのサイズがminsizeを超える場合は、timeperiodだけローテーションします。一般的な使用法は「minsize 1」です。これは、0バイトのログがローテーションされないことを意味し、混乱を最小限に抑えます。

logrotate-3.8.1追加:

  1. maxsizetimeperiodいずれかのサイズがmaxsizeを超えた場合、または経過した時間の経過後にローテーションします。この場合、logrotateをデフォルトよりも1日に1回実行する必要がある場合があります。

logrotate-3.8.5追加:

  1. hourlyをサポートし、完全なタイムスタンプを状態ファイルに保存します。これを行うには、(少なくとも)1時間ごとにlogrotateを実行する必要があります。
25
mr.spuratic