次の新しい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のような新しいファイルが作成されることでした。
最も可能性が高いのは、ログファイルが1日以内であるか、最終日以内にローテーションされており、logrotateが履歴を記憶していることです。
-f
を追加すると、本当に必要な場合は強制的にローテーションが行われます(ただし、-d
との相互作用が100%確実ではありません)。
履歴を見ることができます。場所はディストリビューションによって異なりますが、/var/lib/logrotate/status
かもしれません。そのファイルは、ログが最後にローテーションされた時期を示しています。
新しいログ構成で初めてlogrotateを実行するときは、最後のログローテーションがいつ発生したかはわからないため、/var/lib/logrotate/status
にステータス行を書き込んで、今日実行されたという結果を示します。
その後翌日に実行されると、ログは1日前のものであり、期待どおりにローテーションされます。待ちたくない場合は、logrotateのステータスファイルを編集して、ログのステータス日付を前日に戻します。
Logrotateを手動で実行すると、期待どおりに動作します
Logrotateを手動で実行したとしても、同じ日にそれを実行し、dateext
があり、デフォルト値にsencondsが含まれていない場合、これは機能しないことがあります(例:-%Y%m%d
)。 logrotateのステータスファイルを変更した場合や、サイズディレクティブ(例:size 200M
)を使用した場合でも同様です。少なくともCentOS 6では、logrotateはすでに存在するため、ログファイルのローテーションに失敗します。
これを解決するには、dateformat
の代わりにdateext
を使用し、%Y%m%d%s
のような値を指定する必要があります。
詳細については、man logrotate
を参照してください。
実行することに注意してください
logrotate -vdf /etc/logrotate.conf
シミュレートされたものだけが/var/lib/logrotate.status
に記録されますが、その後のlogrotateの実行は前述の内容で応答しますが、イベント
log does not need rotating