web-dev-qa-db-ja.com

logrotateは「毎日」をどのように正確に処理しますか?

システムのタイムスタンプから判断すると、logrotateがcronによって実行されると、logrotateは毎日のログローテーションを実行します。ただし、それよりも前に実行すると、ファイルがローテーションされません。 logrotateは、ローテーションする必要があるかどうかをどのようにして知るのか、履歴を保持するのか、またはタイムスタンプを使用するのか?

34
Kyle Brandt

状態ファイルの内容だと思います。私の場合は/var/lib/logrotate.statusです。各ファイルには1行あります。これは、最後にローテーションされた日付です。特定のファイルのローテーションが予定されている日付でlogrotateを実行すると、現在の日付とファイル内の日付の間の日数(日ごとに1、週ごとに7など)が与えられると、ファイルはローテーションされます。

logrotateは、実行される時刻を気にしないようです。通常は2355で実行されている場合でも、代わりに0130で実行すると、毎日マークされ、最後に最後に実行されたファイルがローテーションされます。しかし、そうすると、今日の日付が状態ファイルに(ローテーションされたファイルに対して)入れられるため、2355で2回目に実行しても何も起こりません。

33
MadHatter

Logrotateのmanページから:

通常、logrotateは毎日のcronジョブとして実行されます。そのログの基準がログのサイズに基づいており、logrotateが1日に複数回実行されている場合、または-fまたは-forceオプションが使用されていない限り、1日に複数回ログを変更することはありません。

12
sebthebert