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


30

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

回答:


32

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

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


1
うーん..だから次の場合にのみ回転します:現在の日付>日付/var/lib/logrotate/status(ファイルは私の場合)。
カイルブラント

2
最後に実行されてから24時間が経過した場合にのみ、何もしないと思います。これは、状態ファイルのmtimeを調べることで解決します。1日が経過し、合法的に何でもできると判断されると、ファイル内の日付フィールドに基づいて毎日、毎週などの決定を行います。
MadHatterは、

4
さて、そのファイルの日付を使用しているようです。私は...それが回転...ステータスファイルで一日一日のバックを設定し、それを実行しました
カイルブラント

ちょうど戻ってlogrotateを突っ込んだので、私は間違っていたと思います。状態ファイルのタイムスタンプを調べることにより、すでに実行されているかどうかを判断します。そうでない場合は、状態ファイルから最後のローテーションの日付を抽出し、それに応じて動作します。私はviでlogrotateし、-tにタッチして、昨日2355に実行したことを説得しました。再度実行すると、24時間未満だったにもかかわらず、それらを回転させ、それに応じて状態ファイルを更新しました。
MadHatterは、

実行したばかりの一連のテストを考慮して、現在の理解に対する回答を更新しました(muninログを日曜日から8つの方法でスライスしますが、誰も気にしません!)。
MadHatterは、

11

logrotateのmanページから:

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


1
cron.dailyがいつ実行されるかを確認するには、こちらにアクセスしてください
トレバーボイドスミス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.