天天看點

linux logrotate 配置及測試

一、logrotate 配置

logrotate 程式是一個日志檔案管理工具。用來把舊的日志檔案删除,并建立新的日志檔案,我們把它叫做“轉儲”。我們可以根據日志檔案的大小,也可以根據其天數來轉儲,這個過程一般通過 cron 程式來執行。

logrotate 程式還可以用于壓縮日志檔案,以及發送日志到指定的E-mail 。

logrotate 的配置檔案是 /etc/logrotate.conf。主要參數如下表:

參數 功能

compress 通過gzip 壓縮轉儲以後的日志

nocompress 不需要壓縮時,用這個參數

copytruncate 用于還在打開中的日志檔案,把目前日志備份并截斷

nocopytruncate 備份日志檔案但是不截斷

create mode owner group 轉儲檔案,使用指定的檔案模式建立新的日志檔案

nocreate 不建立新的日志檔案

delaycompress 和 compress 一起使用時,轉儲的日志檔案到下一次轉儲時才壓縮

nodelaycompress 覆寫 delaycompress 選項,轉儲同時壓縮。

errors address 專儲時的錯誤資訊發送到指定的Email 位址

ifempty 即使是空檔案也轉儲,這個是 logrotate 的預設選項。

notifempty 如果是空檔案的話,不轉儲

mail address 把轉儲的日志檔案發送到指定的E-mail 位址

nomail 轉儲時不發送日志檔案

olddir directory 轉儲後的日志檔案放入指定的目錄,必須和目前日志檔案在同一個檔案系統

noolddir 轉儲後的日志檔案和目前日志檔案放在同一個目錄下

prerotate/endscript 在轉儲以前需要執行的指令可以放入這個對,這兩個關鍵字必須單獨成行

postrotate/endscript 在轉儲以後需要執行的指令可以放入這個對,這兩個關鍵字必須單獨成行

daily 指定轉儲周期為每天

weekly 指定轉儲周期為每周

monthly 指定轉儲周期為每月

rotate count 指定日志檔案删除之前轉儲的次數,0 指沒有備份,5 指保留5 個備份

tabootext [+] list 讓logrotate 不轉儲指定擴充名的檔案,預設的擴充名是:.rpm-orig, .rpmsave, v, 和 ~

size size 當日志檔案到達指定的大小時才轉儲,Size 可以指定 bytes (預設)以及K (sizek)或者M (sizem).

二、預設配置 logrotate

logrotate 預設的配置募/etc/logrotate.conf。

Red Hat linux 預設安裝的檔案内容是:

# see "man logrotate" for details

# rotate log files weekly

weekly

# keep 4 weeks worth of backlogs

rotate 4

# send errors to root

errors root

# create new (empty) log files after rotating old ones

create

# uncomment this if you want your log files compressed

#compress

1

# RPM packages drop log rotation information into this directory

include /etc/logrotate.d

# no packages own lastlog or wtmp --we'll rotate them here

/var/log/wtmp {

monthly

create 0664 root utmp

rotate 1

}

/var/log/lastlog {

monthly

rotate 1

}

# system-specific logs may be configured here

預設的配置一般放在logrotate.conf 檔案的最開始處,影響整個系統。在本例中就是前面12行。

第三行weekly 指定所有的日志檔案每周轉儲一次。

第五行 rotate 4 指定轉儲檔案的保留 4份。

第七行 errors root 指定錯誤資訊發送給root。

第九行create 指定 logrotate 自動建立新的日志檔案,新的日志檔案具有和

原來的檔案一樣的權限。

第11行 #compress 指定不壓縮轉儲檔案,如果需要壓縮,去掉注釋就可以了。

三、使用include 選項讀取其他配置檔案

include 選項允許系統管理者把分散到幾個檔案的轉儲資訊,集中到一個

主要的配置檔案。當 logrotate 從logrotate.conf 讀到include 選項時,會從指定檔案讀入配置資訊,就好像他們已經在/etc/logrotate.conf 中一樣。

第13行 include /etc/logrotate.d 告訴 logrotate 讀入存放在/etc/logrotate.d 目錄中的日志轉儲參數,當系統中安裝了RPM 軟體包時,使用include 選項十分有用。RPM 軟體包的日志轉儲參數一般存放在/etc/logrotate.d目錄。

include 選項十分重要,一些應用把日志轉儲參數存放在 /etc/logrotate.d ,/etc/logrotate.d/裡的每個檔案配置會覆寫或追加該檔案預設的參數,如果未指定參數,則采用logrotate.conf中預設的參數,比如logrotate.conf中,rotate預設為4, test(四章中的例子)檔案指定rotate為50,将覆寫rotate配置,

典型的應用有:apache, linuxconf, samba, cron 以及syslog, squid。

這樣,系統管理者隻要管理一個 /etc/logrotate.conf 檔案就可以了。

logrotate 也可以直接執行 後直接跟配置檔案就可以了。

-v 給出詳細資訊

-d debug模式,不更改日志檔案内容 模拟執行

-f 強制執行,忽略所有規則

四、測試例子

例1:在/etc/logrotate.d/目錄下,touch test,打開test檔案輸入以下:

[cpp]  view plain copy

  1. <span style="font-size:24px;">/tmp/test.log{  
  2.     missingok  
  3.     create 0640 root root  
  4.     rotate 50  
  5.     size=1k  
  6. }</span>  

在/tmp/目錄下touch test.log檔案

執行指令: dd if=/dev/zero of=test.log bs=1024 count=1000

之後檔案大小為1000K。

執行指令: logrotate -v /etc/logrotate.conf

ls -lrt檢視/tmp目錄多了一個test.log.1,大小是1000K

得出結論:

1.logrotate能設定檔案大小,當超過這個大小時,是轉儲成另一個檔案,而不是按size大小轉儲多個檔案。

2.logrotate本身并不能時時監控檔案大小,logrotate一般是在/etc/cron.daily中一天執行一次,是以當test.log超過配置的size大小時,并不能主動觸發logrotate指令,這将造成logrotate滞後,當然,可以在crontab裡1分鐘執行一次,不過這樣的話,整個日志系統效率會比較低。我們可以寫個腳本一秒執行一次檢測test.log檔案大小。如下:

[cpp]  view plain copy

  1. <span style="font-size:24px;">#!/bin/bash  
  2. a="/tmp/test.log"  
  3. while [[ -f $a ]];  
  4. do  
  5. sleep 1;  
  6. size=`ls -lrt $a | cut -d " " -f 5`  
  7. echo $size  
  8. if [ $size -ge 1024 ];  
  9. then  
  10. logrotate  /etc/logrotate.conf;  
  11. fi  
  12. done</span>  

例2:和例1一樣,也是test.log,不過,在/etc/logrotate.d/test裡改動如下:

[cpp]  view plain copy

  1. <span style="font-size:24px;">/tmp/test.log{  
  2.     missingok  
  3.     create 0640 root root  
  4.     rotate 50  
  5.     size=1k  
  6.     prerotate  
  7.     chattr -a /tmp/test.log  
  8.     endscript  
  9.     postrotate  
  10.     chattr +a /tmp/test.log  
  11.     endscript  
  12. }</span>  

chattr +a屬性是把該檔案變成隻能追加模式,不能截斷和覆寫,也不能重命名,是以logrotate之前,需要chattr -a,logrotate之後再chattr +a加上該屬性(見test檔案)

執行:dd if=/dev/zero of=/tmp/111 bs=1025 count=1 生成1025位元組的111檔案

執行:cat /tmp/111 >> /tmp/test.log

執行:logrotate -vf /etc/logrotate.conf

test.log成功轉儲到test.log.1

來源:http://blog.csdn.net/hepeng597/article/details/7768615

繼續閱讀