Configuration

除非日誌超過一定大小,否則如何根據間隔輪換日誌?

  • September 30, 2020

從 logrotate 的手冊頁:

minsize size

日誌文件在大於 size 字節時進行輪換,但不會在額外指定的時間間隔(每天、每週、每月或每年)之前輪換。相關的大小選項類似,只是它與時間間隔選項互斥,它會導致日誌文件在不考慮上次輪換時間的情況下輪換。使用 minsize 時,會同時考慮日誌文件的大小和時間戳。

size size

日誌文件在大於 size 字節時旋轉。如果 size 後跟 k,則假定大小以千字節為單位。如果使用 M,則大小以兆字節為單位,如果使用 G,則大小以千兆字節為單位。所以大小 100、大小 100k、大小 100M 和大小 100Gare 都是有效的。

我將大小設置為5M,將間隔設置為每週,認為日誌將每週輪換一次,如果日誌大小超過 5M,則會發生額外的輪換。但是發生的情況是日誌不會旋轉,除非它超過 5M,這似乎是minsize應該做的。

我是否錯誤地解釋了手冊?如果日誌超過 5M,我如何讓日誌每週輪換一次?

編輯:

我不確定以下資訊是否相關,只是為了補充:

我正在使用 rsyslog 對消息、安全、cron、maillog、啟動進行主要記錄。以下是如上所述設置大小和間隔的倒數第二個日誌的輪換日期和文件大小:

filename  rotation date  file size
messages  20130129       5.3MB
secure    20130113       5.1kB
cron      20130113       3.6kB
maillog   20130113       1.1kB

可以看出,只有消息被輪換。

編輯2:

我應該檢查一下man logrotate。他們實際上使用maxsize選項對其進行了升級。這應該是我正在尋找的:

maxsize size

日誌文件即使在額外指定的時間間隔(每天、每週、每月或每年)之前變得大於 size 字節時也會輪換。相關的大小選項類似,只是它與時間間隔選項互斥,它會導致日誌文件在不考慮上次輪換時間的情況下輪換。使用 maxsize 時,會同時考慮日誌文件的大小和時間戳。

這裡回答了一些問題: logrotate daily 和 size?

通常logrotate每天只執行一次,因此不會完全遵守大小限制。logrotate的狀態文件(可能/var/lib/logrotate.status)只儲存日期(不是時間),它不打算更頻繁地使用,所以你不能更頻繁地旋轉文件(更新:3.85版增加了每小時的支持,並在狀態文件中儲存了完整的時間戳.)

你沒有說syslogd你正在使用哪個,rsyslogsyslog-ng支持基於大小的自我管理旋轉,所以你應該能夠讓它們按大小旋轉,並logrotate每周旋轉(儘管可能需要一些想法文件命名以確保同時文件旋轉不會意外刪除某些內容)。

另一種選擇是使用管道日誌,就像 Apache,事實上 Apache-2.4rotatelogs 完全支持這個特性(以前的版本只支持大小或時間獨立)。您沒有說明日誌的來源,但您可以登錄到管道或 fifo,並使用rotatelogs(如果支持)。

<= v3.8.0logrotate支持的三個場景是:

  1. size 按大小旋轉,最多每天一次,與經過的時間段無關
  2. 按時間段無條件旋轉(即daily, weekly, monthly, yearly),無論大小
  3. minsize& time period 如果日誌文件大小超過 minsize,則按時間段輪換(使用 `notifempty 作為這種情況的特例)

logrotatev3.8.1 增加:

  1. maxsize 當任一大小超過 maxsize 或經過的時間段後, &時間段會輪換。logrotate在這種情況下,可能需要每天執行一次以上的預設值。

logrotatev3.8.5 增加:

  1. hourly時間段支持,並在狀態文件中儲存完整的時間戳。您應該logrotate(至少)每小時執行一次以使其正常工作。

引用自:https://serverfault.com/questions/474941