萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

Linux 系統日誌管理神器:Logrotate 完整配置與使用指南

在 Linux 系統維護中,日誌檔案若不加以管理,將無限增長佔滿磁碟空間。logrotate 是專為解決此問題而生的標準工具,它能自動執行日誌的輪替、壓縮、刪除與郵寄等操作。本文將深入淺出地介紹其運作原理、核心配置檔結構、常用指令參數,並提供 Nginx、Syslog 等實戰配置範例,助你輕鬆掌握日誌管理精髓。

一、 核心運作原理:基於 Cron 的自動化排程

logrotate 本身並非常駐後台的服務,而是透過 cron 排程器每日自動執行。系統預設會在 /etc/cron.daily/logrotate 放置執行腳本,內容如下:

#!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0

執行頻率由 /etc/crontab 控制,預設每天凌晨執行一次(59 23 * * * root run-parts /etc/cron.daily)。若需調整頻率,可修改 crontab 或將腳本移至 cron.hourly 等目錄。

二、 配置檔架構:主配置與模組化引入

配置採兩層架構:

  • /etc/logrotate.conf:全域預設配置。
  • /etc/logrotate.d/:服務專屬配置目錄,透過 include /etc/logrotate.d 指令納入主配置,實現模組化管理。

三、 核心指令參數詳解

參數說明
weekly每週輪替一次(預設)
rotate 4保留 4 個舊日誌檔
create輪替後建立新空檔案繼續記錄
dateext舊檔命名加上日期(如 xxx.log-20231015),否則為數字遞增
compress啟用壓縮(預設 gzip)
minsize 1M檔案超過 1MB 才觸發輪替
sharedscripts多檔案共用腳本,postrotate 只執行一次
prerotate / endscript輪替前執行的命令區塊
postrotate / endscript輪替後執行的命令區塊(常用於重啟服務)

四、 實戰配置範例

1. 系統預設 Syslog 配置 (/etc/logrotate.d/syslog)

/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron {
    sharedscripts
    prerotate
        /usr/bin/chattr -a /var/log/messages
    endscript
    postrotate
        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
        /bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true
        /usr/bin/chattr +a /var/log/messages
    endscript
}

解析:針對 6 個系統日誌,每週輪替、保留 4 份、不壓縮。輪替前移除 messages 的附加屬性,輪替後發送 HUP 訊號讓 syslogd/rsyslogd 重新開啟日誌檔,最後恢復屬性。

2. Nginx 存取與錯誤日誌配置 (/etc/logrotate.d/nginx)

/usr/local/nginx/logs/*.log {
    daily
    rotate 5
    dateext
    compress
    sharedscripts
    postrotate
        if [ -f /usr/local/nginx/logs/nginx.pid ]; then
            kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
        fi
    endscript
}

解析:每日輪替、保留 5 份、加日期後綴、壓縮。輪替後發送 USR1 訊號通知 Nginx 重新開啟日誌檔(平滑重啟),無需重啟主進程。

五、 常用操作指令

  • logrotate -d /etc/logrotate.conf:除錯模式,不實際執行,輸出詳細規劃動作。
  • logrotate -f /etc/logrotate.conf:強制執行,忽略時間條件立即輪替。
  • logrotate -s /var/lib/logrotate/status /etc/logrotate.conf:指定狀態檔路徑。

六、 總結

logrotate 以「配置簡單、功能強大、系統整合度高」成為 Linux 日誌管理的首選。掌握其 輪替頻率、保留份數、壓縮策略、腳本鉤子 四大核心要素,即可應對絕大多數生產環境場景。建議將各服務配置拆分至 /etc/logrotate.d/ 獨立檔案,利用 include 機制載入,保持主配置乾淨、易維護。

copyright © 萬盛學電腦網 all rights reserved