最近在 Linux 主機中 /var/log 資料夾底下發現有許多的 xxx.log.1, xxx.log.2 的檔案,好奇去查並記錄下來

這些檔案是 log rotate 產生的檔案,主要功能是做日誌檔案的輪替

logrotate 設定檔

主要設定檔的路徑是在 /etc/logrotate.conf,會載入 /etc/logrotate.d/ 底下的檔案,根據設定檔進行 rotate

執行 logrotate

logrotate 預設會在每日的 crontab 中執行 (/etc/cron.daily/logrotate),如果想要手動執行 logrotate 的話,可以直接呼叫 logrotate --force 指令,--force 是強制執行 rotate 檔案,可搭配 --debug 一起使用並觀察

logrotate 範例

/etc/logrotate.conf 檔案中定義 logrotate 的預設值,範例如下

# 設定頻率對日誌檔做 rotate (hourly, daily, weekly, monthly, yearly) (hourly 需要改變 logrotate 的頻率)
# weekly [weekday] <- default 0 (0 means Sunday, 1 means Monday, ... , 6 means Saturday)
weekly

# 日誌被 rotate 了 4 次後刪除舊日誌
rotate 4

# rotate 舊日誌文件後創建新日誌文件權限
# create [mode(octal)] [owner] [group].
create

# 使用日期當作 rotate 文件的後綴
#dateext

# 對日誌檔進行壓縮,預設使用 gzip 壓縮方式
compress

# 載入其他設定檔進行 rotate
include /etc/logrotate.d

/var/log/wtmp {            <= 針對 /var/log/wtmp 檔案的參數設定
    missingok              <= 如果缺少日誌檔案的話,繼續執行下一個而不噴錯誤訊息,對應的參數(nomissingok)
    monthly                <= 一個月進行一次 rotate
    create 0664 root utmp  <= 建立新檔案的權限與群組
    rotate 1               <= 保留一個檔案
    notifempty             <= 如果日誌為空,則不 rotate 日誌
    delaycompress          <= 延後壓縮直到下一次進行 rotate
}

更多關於 logrotate 的細節設定可看手冊

man logrotate.conf