Linux 下的日誌回滾機制探討

linux下的日誌會定期進行回滾,控制系統執行日誌回滾操作的配置文件主要有:/etc/logrotate.conf 以及 /etc/logrotate.d/ 這個目錄下的明細配置文件。

 

/etc/logrotate.d/  這個目錄下的每個配置文件,都對應相應的系統服務,爲每種服務設定特點的日誌回滾機制,比如syslogd

/etc/logrotate.conf 這個文件是默認的日誌回滾操作配置文件,在/etc/logrotate.d/ 這個目錄下沒有明細配置文件的系統日誌,會依照該文件執行日誌回滾。

 

/etc/logrotate.conf 解釋

這個配置文件在不同的linux發行版本之間大同小異,其中默認配置項爲:

 

weekly每週進行一次日誌回滾操作

rotate 4執行回滾操作時,每次只保留四個文件

 

create執行回滾操作時,建立新的文件來繼續記錄日誌,把回滾後的日誌文件重命名

dateext使用日期來爲回滾後的日誌文件命名

 

/etc/logrotate.d/ 下的明細配置文件解釋,這裏以syslog 爲例

 

SUSE 

/etc/logrotate.d/syslog

/var/log/warn /var/log/messages /var/log/allmessages /var/log/localmessages /var/log/firewall {  須要進行回滾的日誌文件,在大括號內配置執行回滾的操作方式。

    compress對回滾後的日誌文件進行壓縮

    dateext使用日期來爲回滾後的日誌文件命名

    maxage 365執行回滾操作的時間爲365天,達到這個時間後,就會刪除所有的回滾日誌文件,重新開始記錄日誌

    rotate 99每次保留99個文件

    missingok如果日誌文件丟失,繼續記錄下一個日誌文件,並不發送錯誤信息

    notifempty 如果日誌文件時空的,則不進行回滾操作

    size +4096k回滾時的日誌文件增量爲4096k 如果沒有"+" 則表示超過這個值就執行一次回滾

    create 640 root root改變回滾後的文件的權限和所屬用戶組

    sharedscripts執行完一次回滾操作後執行的腳本

    postrotate

        /etc/init.d/syslog reload       這裏所執行的腳本是重新加載syslog這個系統服務

    endscript

}

 

RedHat

/etc/logrotate.d/rsyslog

/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron {

    sharedscripts

RedHat Linux下的明細配置文件相對簡單,在執行完一次回滾操作後,kill syslog這個系統服務的進程,實際上就是執行一次 /etc/init.d/syslog restart,其他的操作則按照/etc/logrotate.conf 的配置進行。

 

日誌回滾的執行時間由計劃任務crontab,來控制,由於日誌的回滾操作每天都在進行,特別是系統日誌(syslog),回滾操作的計劃執行由文件:/etc/cron.daily/logrotate 來控制,而系統每天的計劃任務則由文件:/etc/crontab來控制:

SUSE:

/etc/cron.daily/logrotate

#!/bin/sh

 

TMPF=`mktemp /tmp/logrotate.XXXXXXXXXX`

 

/usr/sbin/logrotate /etc/logrotate.conf 2>&1 | tee $TMPF

EXITVALUE=${PIPESTATUS[0]}

 

if [ $EXITVALUE != 0 ]; then

    # wait a sec, we might just have restarted syslog

    sleep 1

    # tell what went wrong

    /bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"

    /bin/logger -t logrotate -f $TMPF

fi

 

rm -f $TMPF

exit 0

 

/etc/crontab 

SHELL=/bin/sh

 

RedHat

/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 

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

HOME=/

 

# run-parts

01 * * * * root run-parts /etc/cron.hourly

02 4 * * * root run-parts /etc/cron.daily

22 4 * * 0 root run-parts /etc/cron.weekly

42 4 1 * * root run-parts /etc/cron.monthly


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章