web-dev-qa-db-ja.com

Logrotate:「ログをローテーションする必要がない」理由

次の新しいlogrotate構成があります。

/var/log/nexus/nexus.log {
    rotate 7
    missingok
    compress
    delaycompress
    copytruncate
    daily
}

logrotate -d nexusを実行すると、次のようになります。

reading config file nexus
reading config info for /var/log/nexus/nexus.log

Handling 1 logs

rotating pattern: /var/log/nexus/nexus.log  after 1 days (7 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/nexus/nexus.log
  log does not need rotating

/ var/log/nexus /フォルダーには以下が含まれています。

nexus.log
oldlogs.tar.gz

LogRotateがnexus.logファイルをローテーションしないのはなぜですか?私が期待していたのは、nexus.logファイルが切り捨てられ、nexus.log-201106241000のような新しいファイルが作成されることでした。

60
Rich

最も可能性が高いのは、ログファイルが1日以内であるか、最終日以内にローテーションされており、logrotateが履歴を記憶していることです。

-fを追加すると、本当に必要な場合は強制的にローテーションが行われます(ただし、-dとの相互作用が100%確実ではありません)。

履歴を見ることができます。場所はディストリビューションによって異なりますが、/var/lib/logrotate/statusかもしれません。そのファイルは、ログが最後にローテーションされた時期を示しています。

68
EightBitTony

新しいログ構成で初めてlogrotateを実行するときは、最後のログローテーションがいつ発生したかはわからないため、/var/lib/logrotate/statusにステータス行を書き込んで、今日実行されたという結果を示します。

その後翌日に実行されると、ログは1日前のものであり、期待どおりにローテーションされます。待ちたくない場合は、logrotateのステータスファイルを編集して、ログのステータス日付を前日に戻します。

Logrotateを手動で実行すると、期待どおりに動作します

61
Tony Sweeney

Logrotateを手動で実行したとしても、同じ日にそれを実行し、dateextがあり、デフォルト値にsencondsが含まれていない場合、これは機能しないことがあります(例:-%Y%m%d)。 logrotateのステータスファイルを変更した場合や、サイズディレクティブ(例:size 200M)を使用した場合でも同様です。少なくともCentOS 6では、logrotateはすでに存在するため、ログファイルのローテーションに失敗します。

これを解決するには、dateformatの代わりにdateextを使用し、%Y%m%d%sのような値を指定する必要があります。

詳細については、man logrotateを参照してください。

5
emerino

実行することに注意してください

logrotate -vdf /etc/logrotate.conf

シミュレートされたものだけが/var/lib/logrotate.statusに記録されますが、その後のlogrotateの実行は前述の内容で応答しますが、イベント

log does not need rotating
1
helvete