日誌管理工具logrotate

dbasdk發表於2015-01-19

1執行原理

Logrotate是基於CRON來執行的,其指令碼是/etc/cron.daily/logrotate

#!/bin/sh

/usr/sbin/logrotate /etc/logrotate.conf

EXITVALUE=$?

if [ $EXITVALUE != 0 ]; then

    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"

fi

exit 0

 

/etc/cron.daily目錄所有指令碼執行頻率是由CRON透過/etc/crontab控制,

有兩種執行方式: 1 直接執行單個命令; 2 目錄規劃,下面僅列舉目錄規劃配置

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

HOME=/

# run-parts

*/1 * * * * root run-parts /etc/cron.min

01 * * * * root run-parts /etc/cron.hourly

59 23 * * * root run-parts /etc/cron.daily

22 4 * * 0 root run-parts /etc/cron.weekly

42 4 1 * * root run-parts /etc/cron.monthly

 

 

 

2配置檔案

/etc/logrotate.conf 全域性預設檔案

/etc/logrotate.d/  目錄,下屬檔案透過include納入前者

 

常用選項

weekly    <==預設一週執行一次 rotate 工作

rotate 4  <==保留多少個日誌檔案.預設保留四個.

create    <==建立新的檔案.因為日誌被改名,因此要建立一個新的來繼續儲存之前的日誌

dateext   <==檔案字尾是日期格式,也就是切割後檔案是:xxx.log-20131216,如果註釋掉,切割出來是按數字遞增,即前面說的 xxx.log-1

compress <==是否壓縮日誌.

 

include /etc/logrotate.d  # /etc/logrotate.d/ 目錄中的所有檔案都載入進來

 

/var/log/wtmp {       <==僅針對 /var/log/wtmp 所設定的引數

    monthly           <==每月一次切割,取代預設的一週

    minsize 1M        <==檔案大小超過 1M 後才會切割

    create 0664 root utmp <==指定新建的日誌檔案許可權以及所屬使用者和組

    rotate 1          <==只保留一個日誌.

}

 

透過include載入的檔案示例如下

[root@www ~]# vi /etc/logrotate.d/syslog

/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron

{

  sharedscripts

  prerotate

    /usr/bin/chattr -a /var/log/messages

  endscript

  sharedscripts

  postrotate

    /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true

    /bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true

    /usr/bin/chattr +a /var/log/messages

  endscript

}

 

日誌檔案: 被處理的日誌絕對路徑.使用空格符分隔多個檔名;

執行指令碼:

可呼叫外部指令來進行額外的命令,這個設定需與 sharedscripts .... endscript 設定合用才行。命令介紹:

prerotate:在啟動 logrotate 之前進行的指令,例如修改檔案的屬性等動作;

postrotate:在做完 logrotate 之後啟動的指令,例如重新啟動 (kill -HUP) 某個服務;

 

那麼 /etc/logrotate.d/syslog 內設定的六個檔案的切割功能就變成了:

1.該設定只對 /var/log/ 內的 messages, secure, maillog, spooler, boot.log, cron 有效;

2.日誌切割每週一次、保留四個、且切割下來的日誌檔案不進行壓縮(未更改預設值)

3.切割完畢後 (postrotate) 取得 syslog PID 後,以 kill -HUP 重新啟動 syslogd

 

 

 

切割案例:Nginx

============================

/etc/logrotate.d 新建 nginx

/usr/local/nginx/logs/*.log {

daily

rotate 5

dateext

compress

sharedscripts

postrotate

    if [ -f /usr/local/nginx/logs/nginx.pid ]; then

        kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`

    fi

endscript

}

 

參考資料

 

http://blog.sina.com.cn/s/blog_5f54f0be0101h6y8.html

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29734436/viewspace-1406836/,如需轉載,請註明出處,否則將追究法律責任。

相關文章