ログローテート:「ログにローテーションが不要」理由


57

次の新しい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のような新しいファイルが作成されることでした。


また、-dオプションを使用する場合、ログは回転しません。ゲームプランのように、オプションなしで実行した場合の動作を示します。それらが回転するのを見ることができると思ったとき、私はいくつかの深刻な頭痛を引き起こしました、そして、彼らはまだそこにいました。
マックスウェルフランダース

回答:


64

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

-f本当に追加したい場合は、追加すると強制的に回転します(ただし、それがどのように相互作用するかは100%確かではありません-d)。

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


4
FreeBSDでは/var/run/logrotate.status
kaleissin

また、ステータスファイルの場所のための呼び出しで-s引数の使用可能性をチェック
JGurtz

2
-d+は、-flogrotateのレポートは、すべてのファイル、一致していないものも含めために「回転必要」になり
ふわふわ

これに追加するには、ステータスファイルの日付を編集してローテーションポリシーよりも古くすることlogrotateで、ログを再度実行するときにログをローテーションする必要があると確信できます。
-Centimane

CentOSでは、/ var / lib / logrotate.statusを変更してlogrotateを機能させました。EightBitTonyが示すように、毎日のlogrotateは履歴を記憶します。ファイルが過去の日付で既に履歴にない限り、logrotateはファイルを回転しません。
マーク

58

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

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

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


5

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

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

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


1

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

logrotate -vdf /etc/logrotate.conf

シミュレートされたイベントのみが記録されますが/var/lib/logrotate.status 、その後のlogrotateの実行では、言及された

log does not need rotating

1
Ubuntu(16.04および17.04)では再現できません。「/var/lib/logrotate.status」を使用する場合は、別のディストリビューションを使用する必要があります。Ubuntuは「/ var / lib / logrotate / status」にログを記録します。
フィリップクラッセン

2
@PhilippClaßen:あなたは正しいです(ステータスファイルはにあります/var/lib/logrotate.status)。これは、Dockerコンテナ内のAlpine linux 3.5でLogrotate 3.10の構成をデバッグしているときに観察されました。しかし、質問の定義にはUbuntuフラグはありませんか?
-helvete

1
はい、大丈夫です。Ubuntuがとても人気があるので、私はそれについて言及します。多くの人がこの質問を読んだのは、サーバーを修正したいからだと思います。サーバーは現在、Ubuntuで頻繁に実行されています。
フィリップクラッセン

1
はい、そうです。完了するために、Centos 7ディストリビューションのステータスファイルの場所は/var/lib/logrotate/logrotate.status
-helvete
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.