logrotate旨在簡化對生成大量日誌文件的系統的管理。支持自動輪訓,壓縮,刪除和郵寄日誌文件。每個日誌文件可以按每天,每週,每月或文件大小進行處理。
默認logrotate以每天爲週期的定時任務運行。除了以日誌文件大小爲切割條件或者手動使用 -f (--force) 參數切割的任務每天會切割多次,其他條件下同一任務每天只處理一次。
文件
/var/lib/logrotate.status
:默認狀態記錄文件;/etc/logrotate.conf
:配置文件
參數
-
-d, --debug: 調試用,打印執行結果,不會真正執行;
-
-f, --force: 強制執行,用於剛添加或修改任務或歷史切割文件被刪除後,強制執行切割(每天只執行一次)。
-
-m, --mail <command> : 指定logrotate發送郵件時使用的命令,該命令需接收兩個參數:郵件主題;郵件接收人。該命令必須閱讀標準輸入上的消息並將其郵寄給收件人。默認命令:
/bin/mail -s
。 -
-s, --state <statefile>: 指定記錄logrotate執行結果的文件,在使用特定用戶執行logrotate時較有用。
-
--usage:
打印簡短的使用信息。
-
--?, --help:
打印幫助信息。
-
-v, --verbose: 開啓詳細模式。
使用配置文件
logrotate可以批量從配置文件中讀取關於日誌切割的配置信息,配置文件中定義要切割的文件、切割規則等信息。
示例:
compress # 全局參數,對本配置中所有單元生效
/var/log/messages {
rotate 5 # 保留5份切割後的文件
weekly # 每週切割一次
postrotate # 切割後執行以下命令,用於創建新的日誌文件
/usr/bin/killall -HUP syslogd
endscript
}
/var/log/httpd/access.log
/var/log/httpd/error.log {
rotate 5
mail [email protected] # 發送郵件
size 100k # 指定文件切割條件,≥100k 切割
sharedscripts # 對本組指定的日誌文件共享下面的腳本
postrotate
/usr/bin/killall -HUP httpd
endscript
}
/var/log/news/* {
monthly # 每個月切割一次
rotate 2
olddir /var/log/news/old # 指定切割後的文件存放位置
missingok # 忽略文件不存在的情況
postrotate
kill -HUP 'cat /var/run/inn.pid'
endscript
nocompress # 不壓縮,定義在某個單元內的參數優先級高於定義在全局的參數
}
配置文件參數解讀
- compress: 壓縮切割後的文件,默認爲gzip;
- compresscmd: 指定壓縮切割後文件的方式,默認爲gzip;
- uncompresscmd: 指定解壓日誌文件的方式,默認爲gunzip;
- compressext: 指定開啓compress時壓縮文件擴展名,默認使用指定壓縮命令的默認擴展名;
- compressoptions: 爲壓縮命令指定參數,默認爲gzip指定參數,如指定壓縮level(默認爲'-9');
- copy: 複製日誌文件,不改變原文件。該選項可以在日誌文件做快照或日誌文件需要清空/做分析時使用。使用該選項時,create 選項不生效。
- copytruncate: 複製原文件並清空原日誌文件,不改變原文件(inode)。當無法告知某些程序關閉其日誌文件時,可以使用它,從而可能永遠繼續寫入(追加)以前的日誌文件。請注意,複製文件和截斷文件之間的時間間隔非常短,因此可能會丟失一些日誌記錄數據。使用此選項時,create 選項將無效,因爲舊的日誌文件將保留在原位。
- create <mode> <owner> <group>: 切割後立即(在運行postrotate腳本之前)創建日誌文件(與剛切割的日誌文件同名)。可以指定文件的mode、owner、group,可以省略任何日誌文件屬性,在這種情況下,新文件的那些屬性將使用與原始日誌文件相同的值作爲被省略的屬性。可以使用nocreate選項禁用此選項。
- daily: 每天切割一次日誌文件;
- dateext: 切割後的文件使用日期作爲擴展名,如YYYYMMDD,可以用 dateformat 指定擴展名格式;
- dateformat: 用
%Y %m %d %s
指定擴展名時間格式,默認爲%Y%m%d
。 - delaycompress: 將上一個日誌文件的壓縮推遲到下一個循環週期。僅在與compress結合使用時纔有效。當無法告知某些程序關閉其日誌文件並因此可能在一段時間內繼續寫入以前的日誌文件時,可以使用它。
- extension ext: 保留原有文件名後綴。如在使用compress時,原文件爲 mylog.foo,rotate後想保留文件名爲 mylog.1.foo.gz 而不是mylog.foo.1.gz,就可以通過該選項實現。
- ifempty: 即便文件是空文件也依然切割。
- include file_or_directory: 讀取作爲參數給出的文件,就好像該文件包含在包含指令出現的行內。如果給出了目錄,則在繼續處理包含文件之前,將按字母順序讀取該目錄中的大多數文件。唯一被忽略的文件是非常規文件(例如目錄和命名管道)以及名稱以tabooext指令指定的忌諱擴展名之一結尾的文件。 include指令可能不會出現在日誌文件定義中。
- mail address: 發送郵件,跟郵件地址。
- mailfirst: 使用mail時,發送最新切割的文件而不是即將過期的文件。
- maillast: 使用mail時,發送即將過期的文件而不是最新切割的文件。
- maxage count: 刪除 count 天數之前的切割文件。
- minsize size: 指定進行rotate 的日誌文件size,即達到這個size就進行切割。
- missingok: 如果文件不存在,繼續執行。
- monthly: 以第一次切割時間爲基準,每個月切割一次。
- nocompress: 不壓縮切割後的文件。
- nocopy: 不copy原文件。
- nocopytruncate: 創建文件副本後,不清空原文件。
- nocreate: 不創建新文件。
- nodelaycompress: 不要將上一個日誌文件的壓縮推遲到下一個循環週期(這會覆蓋delaycompress選項)。
- nodateext: 不使用date做爲切割後文件的擴展名。
- nomail: 不發送郵件。
- nomissingok: 如果文件不存在,則報錯(默認)。
- noolddir: 切割後的文件存放在原目錄(默認)。
- nosharedscripts: 爲每個循環的日誌文件運行prerotate和postrotate腳本(這是默認設置,並且覆蓋了sharedscripts選項)。日誌文件的絕對路徑作爲第一個參數傳遞給腳本。如果腳本錯誤退出,則僅對受影響的日誌不執行其餘操作。
- noshred: 刪除舊的日誌文件時,不使用shred。
- notifempty: 不切割空文件。
- olddir directory: 指定切割後的文件存放位置。
- postrotate/endscript: 切割日誌文件後,將執行sharedscripts和sharedscripts之間的行(兩者都必須自己顯示在行上)。這些指令只能出現在日誌文件定義中。通常,日誌文件的絕對路徑作爲第一個參數傳遞給腳本。如果指定了sharedscripts,則整個模式都將傳遞到腳本。另請參見prerotate。有關錯誤處理,請參見sharedscripts和nosharedscripts。
- prerotate/endscript: 僅在日誌實際切割之前(使用
/ bin / sh
)執行prerotate和endscript之間的行(兩者都必須自己顯示在行上)。 這些指令只能出現在日誌文件定義中。 通常,日誌文件的絕對路徑作爲第一個參數傳遞給腳本。 如果指定了sharedscripts,則將整個模式傳遞到腳本。 另請參見postrotate。 有關錯誤處理,請參見sharedscripts和nosharedscripts。 - firstaction/endscript: 僅在切割所有與通配符模式匹配的日誌文件之前,在運行prerotate腳本之前並且僅在至少有一個以下命令的情況下,執行一次(使用
/ bin / sh
)firstaction和endscript之間的行(兩者都必須自己出現在行中) 日誌實際上將被輪換。 這些指令只能出現在日誌文件定義中。 整個模式作爲第一個參數傳遞給腳本。 如果腳本錯誤退出,則不做進一步處理。 另請參閱lastaction。 - lastaction/endscript: 在切割所有與通配符模式匹配的日誌文件之後,在運行postrotate腳本之後,並且僅當至少一個 日誌被切割。 這些指令只能出現在日誌文件定義中。 整個模式作爲第一個參數傳遞給腳本。 如果腳本錯誤退出,則僅顯示錯誤消息(這是最後一個操作)。 另請參閱firstaction。
- rotate count: 在刪除日誌文件或將其郵寄到mail指令中指定的地址之前,會對日誌文件進行輪換計數。 如果count爲0,則將刪除舊版本,而不是切割舊版本。保留幾個切割後文件 count 就指定爲幾。
- size size: 僅當日志文件變得更大然後再增大大小字節時,纔對日誌文件進行輪換。 如果size後面跟着k,則假定大小爲千字節。 如果使用M,則大小以兆字節爲單位;如果使用G,則大小以千兆字節爲單位。 因此大小100,大小100k,大小100M和大小100G均有效。
- sharescripts: 通常,對每個循環日誌運行prerotate和postrotate腳本,並將日誌文件的絕對路徑作爲第一個參數傳遞給腳本。 這意味着單個腳本可以針對與多個文件匹配的日誌文件條目多次運行(例如
/ var / log / news / *
示例)。 如果指定了sharedscripts,則無論有多少個日誌與通配符模式匹配,腳本都只會運行一次,並且整個模式都將傳遞給它們。 但是,如果該模式中的所有日誌都不需要輪換,則這些腳本將完全不會運行。 如果腳本錯誤退出,則其餘操作將不會對任何日誌執行。 此選項將覆蓋nosharedscripts選項,並暗含create選項。 - shred: 使用shred -u而不是unlink()刪除日誌文件。 這應確保在計劃刪除日誌後不可讀; 默認情況下是關閉的。 另請參見noshred。
- shredcycles count: 要求GNU shred(1)覆蓋刪除前的日誌文件計數次數。 沒有此選項,將使用shred的默認值。
- start count: 這是用作切割基準的數字。 例如,如果指定0,則從原始日誌文件輪換後,將創建擴展名爲.0的日誌。 如果指定9,將以.9(跳過0-8)創建日誌文件。 文件仍將切割使用count指令指定的次數。
- tabooext [+] list: 當前的禁忌擴展名列表已更改(有關禁忌擴展名的信息,請參見include指令)。 如果擴展名列表前面有+,則將擴展當前的禁忌擴展名列表,否則將被替換。 在啓動時,禁忌擴展名列表包含.rpmorig,.rpmsave,.v,.swp,.rpmnew,〜,.cfsaved和.rhn-cfg-tmp- *。
- weekly: 以第一次切割時間爲基準,每個星期切割一次。
- yearly: 以第一次切割時間爲基準,每年切割一次。