Logrotate:「ログを回転する必要はありません。」なぜですか?

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)が生成されることです。

答え1

ほとんどの場合、ログファイルは1日が経過していないか、最後の日に回転しており、logrotateは履歴を覚えています。

追加すると、-f本当に必要に応じて回転が強制されます(しかし、それがどのようにやり取りするのか100%確信できません-d)。

履歴が表示され、場所はディストリビューションによって異なりますが、おそらく/var/lib/logrotate/status。このファイルには、ログが最後に循環された時刻が表示されます。

答え2

新しいログ構成で初めてlogrotateを実行すると、最後のログ回転がいつ発生したのかわからないため、/var/lib/logrotate/status今日実行されたことを示すステータス行のみを作成します。

翌日実行すると、ログは1日が経過したことを確認し、期待どおりに回転します。待たないようにするには、logrotateのステータスファイルを編集し、ログのステータス日付を前日に復元します。

logrotateを手動で実行すると、期待どおりに機能します。

答え3

dateext時にはlogrotateを手動で実行しても同じ日に実行し、デフォルト値に秒が含まれていない場合は-%Y%m%d機能しません(例:)。 logrotateのステータスファイルを変更したり、サイズディレクティブ(たとえば)を使用したりする場合もsize 200M同様です。少なくともCentOS 6では、logrotateはログファイルがすでに存在するため回転できません。

この問題を解決するには、次の値で代わりにdateformat使用する必要があります。dateext%Y%m%d%s

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

答え4

参考として実行すると

logrotate -vdf /etc/logrotate.conf

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

log does not need rotating

関連情報