linux logrotate 配置及測試

 

標籤: linuxincludecron擴展測試apachenode

2012-07-20 19:31 9887人閱讀 評論(0) 收藏 舉報linux

 分類:apache

linux編程(18) 編程

版權聲明:本文爲博主原創文章,未經博主容許不得轉載。bash

1、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, 和 ~app

size size 當日志文件到達指定的大小時才轉儲,Size 能夠指定 bytes (缺省)以及K (sizek)或者M (sizem).工具

2、缺省配置 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 指定不壓縮轉儲文件,若是須要壓縮,去掉註釋就能夠了。post

3、使用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 強制執行,忽略全部規則測試

4、測試例子ui

例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

相關文章
相關標籤/搜索