標籤: 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
在/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
例2:和例1同樣,也是test.log,不過,在/etc/logrotate.d/test裏改動以下:
[cpp] view plain copy
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