一、安裝logrotate
二、logrotate 配置
三、預設配置logrotate
四、使用include
五、為指定的檔案配置轉儲參數
六、其他需要注意的問題
七、logrotate指令
<code>yum </code><code>install</code> <code>logrotate -y</code>
<code>[root@localhost ~]</code><code># rpm -ql logrotate</code>
<code>/etc/cron</code><code>.daily</code><code>/logrotate</code>
<code>/etc/logrotate</code><code>.conf</code>
<code>/etc/logrotate</code><code>.d</code>
<code>/usr/sbin/logrotate</code>
<code>/usr/share/doc/logrotate-3</code><code>.7.8</code>
<code>/usr/share/doc/logrotate-3</code><code>.7.8</code><code>/CHANGES</code>
<code>/usr/share/doc/logrotate-3</code><code>.7.8</code><code>/COPYING</code>
<code>/usr/share/man/man5/logrotate</code><code>.conf.5.gz</code>
<code>/usr/share/man/man8/logrotate</code><code>.8.gz</code>
<code>/var/lib/logrotate</code><code>.status</code>
<code>[root@localhost ~]</code><code># cat /etc/cron.daily/logrotate //logrotate是以天為基礎機關的</code>
<code>#!/bin/sh</code>
<code>/usr/sbin/logrotate</code> <code>/etc/logrotate</code><code>.conf</code>
<code>EXITVALUE=$?</code>
<code>if</code> <code>[ $EXITVALUE != 0 ]; </code><code>then</code>
<code> </code><code>/usr/bin/logger</code> <code>-t logrotate </code><code>"ALERT exited abnormally with [$EXITVALUE]"</code>
<code>fi</code>
<code>exit</code> <code>0</code>
logrotate 程式是一個日志檔案管理工具。用來把舊的日志檔案删除,并建立新的日志檔案,我們把它叫做“轉儲”。我們可以根據日志檔案的大小,也可以根據其天數來轉儲,這個過程一般通過 cron 程式來執行。
logrotate 程式還可以用于壓縮日志檔案,以及發送日志到指定的E-mail 。
logrotate 的配置檔案是 /etc/logrotate.conf。主要參數如下表:
參數 功能
<code>compress 通過</code><code>gzip</code> <code>壓縮轉儲以後的日志</code>
<code>nocompress 不需要壓縮時,用這個參數</code>
<code>copytruncate 用于還在打開中的日志檔案,把目前日志備份并截斷</code>
<code>nocopytruncate 備份日志檔案但是不截斷</code>
<code>create mode owner group 轉儲檔案,使用指定的檔案模式建立新的日志檔案</code>
<code>nocreate 不建立新的日志檔案</code>
<code>delaycompress 和 compress 一起使用時,轉儲的日志檔案到下一次轉儲時才壓縮</code>
<code>nodelaycompress 覆寫 delaycompress 選項,轉儲同時壓縮。</code>
<code>errors address 專儲時的錯誤資訊發送到指定的Email 位址</code>
<code>ifempty 即使是空檔案也轉儲,這個是 logrotate 的預設選項。</code>
<code>notifempty 如果是空檔案的話,不轉儲</code>
<code>mail address 把轉儲的日志檔案發送到指定的E-mail 位址</code>
<code>nomail 轉儲時不發送日志檔案</code>
<code>olddir directory 轉儲後的日志檔案放入指定的目錄,必須和目前日志檔案在同一個檔案系統</code>
<code>noolddir 轉儲後的日志檔案和目前日志檔案放在同一個目錄下</code>
<code>prerotate</code><code>/endscript</code> <code>在轉儲以前需要執行的指令可以放入這個對,這兩個關鍵字必須單獨成行</code>
<code>postrotate</code><code>/endscript</code> <code>在轉儲以後需要執行的指令可以放入這個對,這兩個關鍵字必須單獨成行</code>
<code>daily 指定轉儲周期為每天</code>
<code>weekly 指定轉儲周期為每周</code>
<code>monthly 指定轉儲周期為每月</code>
<code>rotate count 指定日志檔案删除之前轉儲的次數,0 指沒有備份,5 指保留5 個備份</code>
<code>tabootext [+] list 讓logrotate 不轉儲指定擴充名的檔案,預設的擴充名是:.rpm-orig, .rpmsave, </code><code>v</code><code>, 和 ~</code>
<code>size size 當日志檔案到達指定的大小時才轉儲,Size 可以指定 bytes (預設)以及KB (sizek)或者MB (sizem).</code>
<code>start COUNT 輪轉檔案名基于這個數字。</code>
<code> </code><code>例如,指定0時,原日志檔案輪轉的備份檔案以.0為擴充名,如果指定9,就直接從.9開始跳過0-8</code>
<code> </code><code>然後再繼續向後輪轉rotate指定的次數。</code>
<code>compresscmd 指定解壓指令,預設gunzip</code>
<code>uncompresscmd </code>
<code>compressoptions 可以傳送指令行選項給壓縮程式,預設的</code><code>gzip</code><code>使用-9選項(最大壓縮率)</code>
<code>maxage COUNT 删除COUNT天前的輪轉備份。</code>
<code> </code><code>隻在輪轉動作時檢查日志檔案的時間戳。</code><code>//</code><code>如果配置了maillast和mail指令,删除的輪轉備份會被郵寄。</code>
<code>minsize SIZE</code>
<code> </code><code>日志檔案增長到超過SIZE bytes時進行輪轉,但不會在額外指定的時間間隔之前(daily,weekly等)。</code>
<code> </code><code>相關的size指令與其類似,但size與間隔指令互斥,不考慮時間而直接進行輪轉。</code>
<code> </code><code>而minsize指令要考慮大小和時間戳。</code>
<code>size SIZE 超過SIZE時輪轉,SIZE預設機關是KB,可使用M,G來指定MB和GB。</code>
<code>shred</code>
<code> </code><code>預設關閉</code>
<code> </code><code>删除檔案使用shred -u(銷毀)而不是unlink()系統調用。</code>
<code> </code><code>可確定删除日志後,檔案不可讀(對磁盤傷害大)。</code>
<code>shredcycles COUNT 調用shred在删除日志檔案前覆寫COUNT次,不使用此項時,就按shred預設次數覆寫。</code>
<code>noshred 删除就檔案時不使用shred</code>
<code>missingok 如果日志檔案不存在,繼續處理下一個檔案而不産生報錯資訊。</code>
<code>nomissingok 預設項,如果日志檔案不存在,就産生錯誤。</code>
logrotate 預設的配置募?/etc/logrotate.conf。
Red Hat Linux 預設安裝的檔案内容是:
<code># see "man logrotate" for details</code>
<code># rotate log files weekly</code>
<code>weekly</code>
<code># keep 4 weeks worth of backlogs</code>
<code>rotate 4</code>
<code># send errors to root</code>
<code>errors root</code>
<code># create new (empty) log files after rotating old ones</code>
<code>create</code>
<code># uncomment this if you want your log files compressed</code>
<code>#compress</code>
<code>1</code>
<code># RPM packages drop log rotation information into this directory</code>
<code>include </code><code>/etc/logrotate</code><code>.d</code>
<code># no packages own lastlog or wtmp --we'll rotate them here</code>
<code>/var/log/wtmp</code> <code>{</code>
<code>monthly</code>
<code>create 0664 root utmp</code>
<code>rotate 1</code>
<code>}</code>
<code>/var/log/lastlog</code> <code>{</code>
# system-specific logs may be configured here
預設的配置一般放在logrotate.conf 檔案的最開始處,影響整個系統。在本例中就是前面12行。
第三行weekly 指定所有的日志檔案每周轉儲一次。
第五行 rotate 4 指定轉儲檔案的保留 4份。
第七行 errors root 指定錯誤資訊發送給root。
第九行create 指定 logrotate 自動建立新的日志檔案,新的日志檔案具有和原來的檔案一樣的權限。
第11行 #compress 指定不壓縮轉儲檔案,如果需要壓縮,去掉注釋就可以了。
第13行 include /etc/logrotate.d 告訴 logrotate 讀入存放在/etc/logrotate.d 目錄中的日志轉儲參數,當系統中安裝了RPM 軟體包時,使用include 選項十分有用。RPM 軟體包的日志轉儲參數一般存放在/etc/logrotate.d 目錄。
四、使用include 選項覆寫預設配置
當 /etc/logrotate.conf 讀入檔案時,include 指定的檔案中的轉儲參數将覆寫預設的參數,如下例:
<code># linuxconf 的參數</code>
<code>/var/log/htmlaccess</code><code>.log</code>
<code>{ errors jim</code>
<code>notifempty</code>
<code>nocompress</code>
<code>prerotate</code>
<code>/usr/bin/chattr</code> <code>-a </code><code>/var/log/htmlaccess</code><code>.log</code>
<code>endscript</code>
<code>postrotate</code>
<code>/usr/bin/chattr</code> <code>+a </code><code>/var/log/htmlaccess</code><code>.log</code>
<code> </code><code>}</code>
<code>/var/log/netconf</code><code>.log</code>
<code>{ nocompress</code>
在這個例子中,當 /etc/logrotate.d/linuxconf 檔案被讀入時,下面的參數将覆寫/etc/logrotate.conf中預設的參數。
Notifempty
errors jim
經常需要為指定檔案配置參數,一個常見的例子就是每月轉儲/var/log/wtmp。為特定檔案而使用的參數格式是:
# 注釋
/full/path/to/file
{
option(s)
}
下面的例子就是每月轉儲 /var/log/wtmp 一次:
#Use logrotate to rotate wtmp
/var/log/wtmp
monthly
rotate 1
1、盡管花括号的開頭可以和其他文本放在同一行上,但是結尾的花括号必須單獨成行。
2、使用 prerotate 和 postrotate 選項
下面的例子是典型的腳本 /etc/logrotate.d/syslog,這個腳本隻是對
/var/log/messages 有效。
<code>/var/log/messages</code>
<code>{</code>
<code>/usr/bin/chattr</code> <code>-a </code><code>/var/log/messages</code>
<code>/usr/bin/kill</code> <code>-HUP syslogd</code>
<code>/usr/bin/chattr</code> <code>+a </code><code>/var/log/messages</code>
第一行指定腳本對 /var/log messages 有效
花括号外的/var/log messages
prerotate 指令指定轉儲以前的動作/usr/bin/chattr -a 去掉/var/log/messages檔案的“隻追加”屬性 endscript 結束 prerotate 部分的腳本postrotate 指定轉儲後的動作
/usr/bin/killall -HUP syslogd
用來重新初始化系統日志守護程式 syslogd
/usr/bin/chattr +a /var/log/messages
重新為 /var/log/messages 檔案指定“隻追加”屬性,這樣防治程式員或使用者覆寫此檔案。
最後的 endscript 用于結束 postrotate 部分的腳本
3、logrotate 的運作分為三步:
判斷系統的日志檔案,建立轉儲計劃以及參數,通過cron daemon 運作下面的代碼是 Red Hat Linux 預設的crontab 來每天運作logrotate。
#/etc/cron.daily/logrotate
#! /bin/sh
/usr/sbin/logrotate /etc/logrotate.conf
4、/var/log/messages 不能産生的原因:
這種情況很少見,但是如果你把/etc/services 中的 514/UDP 端口關掉的話,這個檔案就不能産生了。
-?或--help:線上幫助;
-d或--debug:詳細顯示指令執行過程,便于排錯或了解程式執行的情況;
-f或--force :強行啟動記錄檔案維護操作,縱使logrotate指令認為沒有需要亦然;
-s<狀态檔案>或--state=<狀态檔案>:使用指定的狀态檔案;
-v或--version:顯示指令執行過程;
-usage:顯示指令基本用法。
http://blog.csdn.net/cjwid/article/details/1690101
http://blog.163.com/bull_linux/blog/static/2138811422013101334544349/
本文轉自MT_IT51CTO部落格,原文連結:http://blog.51cto.com/hmtk520/2053060,如需轉載請自行聯系原作者