Linux 系統運行久了,日誌檔案會無限增長佔滿磁碟。Logrotate 正是為此而生:定期輪替(重命名/歸檔)、壓縮、刪除舊日誌,確保磁碟空間可控。本文詳細解析配置檔結構、應用層配置、啟用方式與壓縮最佳實踐。
/etc/logrotate.conf定義全域預設策略:
# rotate log files weekly
#weekly
# rotate log files daily
daily
# keep 4 weeks worth of backlogs
#rotate 4
# keep 7 days worth of backlogs
rotate 7
# create new (empty) log files after rotating old ones
create
關鍵參數解讀:
daily/weekly/monthly:輪替頻率(互斥,取消註釋生效)rotate N:保留 N 個歸檔副本,超過自動刪除最舊create:輪替後自動建立新空日誌檔,保持服務寫入不中斷以上配置效果:每日輪替,保留 7 天,檔名演變為 logfile、logfile.0...logfile.6。
/etc/logrotate.d/各服務(nginx、mysql、syslog 等)在此放置專屬配置,優先級高於全域配置。新裝服務務必確認此目錄下有對應檔案。
.tgz 檔案專用策略/data/backups/*.tgz {
daily
rotate 30
nocompress
missingok
notifempty
create 0600 root root
}
nocompress:不壓縮(已是壓縮包)missingok:檔案不存在不報錯notifempty:空檔不輪替create 0600 root root:新檔權限與擁有者/etc/cron.daily/sysklogd 讀取 /etc/syslog.conf 自動輪替系統日誌,無需在 logrotate.d 重複配置/etc/cron.daily/logrotate 驅動,不讀取 syslog 配置,必須在 logrotate.d 顯式配置# 強制執行所有配置
logrotate -f /etc/logrotate.conf
# 僅執行特定配置檔
logrotate -f /etc/logrotate.d/syslog
編輯 /etc/logrotate.conf 加入:
# Activate log compression
compress
gzip 壓縮,副檔名 .gzzcat /var/log/messages.1.gz/var/log/messages
/var/log/messages.1.gz
/var/log/messages.2.gz
...
/var/log/messages.7.gz
logrotate.d 有獨立配置daily + compress + delaycompress(次日再壓縮,利於即時分析)logrotate -f 測試配置有效性/var/log 磁碟使用率,設定告警閾值掌握 Logrotate,讓日誌管理從「被動滅火」轉為「主動可控」,守護系統穩定運行。