日志輪詢工具Logrotate的使用


Lograte的作用

     我們可以在 Linux中配置 logrotate 程序,它可以自動執行日志文件的輪換、壓縮、刪除和用郵件發出。

我們可以配置 logrotate 程序,以便每個日志文件可以在每天、每周、每月或當它變得太大時處理。

 

Logrotate 是如何工作的

    默認情況下,logrotate 命令作為放在 /etc/cron.daily 中的 cron 任務,可以在/etc/cron.daily/logrotate看到是每天會調用logrotate命令進行切割,

切割的時間是在/etc/anacrontab 文件的START_HOURS_RANGE中配置,一般在3點到22點執行。

 

Logrotate的主要配置文件和命令

默認配置文件

/etc/logrotate.conf
/etc/logrotate.d/*主要

 

logrotate命令格式:
logrotate [OPTION...] <configfile>
-d, --debug :debug模式,測試配置文件是否有錯誤。
-f, --force :強制轉儲文件。
-m, --mail=command :壓縮日志后,發送日志到指定郵箱。
-s, --state=statefile :使用指定的狀態文件。
-v, --verbose :顯示轉儲過程。

根據日志切割設置進行操作,並顯示詳細信息

/usr/sbin/logrotate -v /etc/logrotate.conf

根據日志切割設置進行執行,並顯示詳細信息,但是不進行具體操作,debug模式

/usr/sbin/logrotate -d /etc/logrotate.d/nginx
 /usr/sbin/logrotate -d /etc/logrotate.conf

查看日志的執行情況

cat /var/lib/logrotate.status

配置參數

weekly          //默認每一周執行一次rotate輪轉工作
rotate 4       //保留多少個日志文件(輪轉幾次).默認保留四個.就是指定日志文件刪除之前輪轉的次數,0 指沒有備份
create  0664 nginx root       //自動創建新的日志文件,新的日志文件具有和原來的文件相同的權限;因為日志被改名,因此要創建一個新的來繼續存儲之前的日志
dateext       //這個參數很重要!就是切割后的日志文件以當前日期為格式結尾,如xxx.log-20131216這樣,如果注釋掉,切割出來是按數字遞增,即xxx.log-1這種格式
compress      //是否通過gzip壓縮轉儲以后的日志文件,如xxx.log-20131216.gz ;如果不需要壓縮,注釋掉就行
compress                                   通過gzip 壓縮轉儲以后的日志
nocompress                                不做gzip壓縮處理
copytruncate                              用於還在打開中的日志文件,把當前日志備份並截斷;是先拷貝再清空的方式,拷貝和清空之間有一個時間差,可能會丟失部分日志數據。
nocopytruncate                           備份日志文件不過不截斷
create mode owner group             輪轉時指定創建新文件的屬性,如create 0777 nobody nobody
nocreate                                    不建立新的日志文件
delaycompress                           和compress 一起使用時,轉儲的日志文件到下一次轉儲時才壓縮
nodelaycompress                        覆蓋 delaycompress 選項,轉儲同時壓縮。
missingok                                 如果日志丟失,不報錯繼續滾動下一個日志
errors address                           專儲時的錯誤信息發送到指定的Email 地址
ifempty                                    即使日志文件為空文件也做輪轉,這個是logrotate的缺省選項。
notifempty                               當日志文件為空時,不進行輪轉
mail address                             把轉儲的日志文件發送到指定的E-mail 地址
nomail                                     轉儲時不發送日志文件
olddir directory                         轉儲后的日志文件放入指定的目錄,必須和當前日志文件在同一個文件系統
noolddir                                   轉儲后的日志文件和當前日志文件放在同一個目錄下
sharedscripts                           運行postrotate腳本,作用是在所有日志都輪轉后統一執行一次腳本。如果沒有配置這個,那么每個日志輪轉后都會執行一次腳本
prerotate                                 在logrotate轉儲之前需要執行的指令,例如修改文件的屬性等動作;必須獨立成行
postrotate                               在logrotate轉儲之后需要執行的指令,例如重新啟動 (kill -HUP) 某個服務!必須獨立成行
daily                                       指定轉儲周期為每天
weekly                                    指定轉儲周期為每周
monthly                                  指定轉儲周期為每月
rotate count                            指定日志文件刪除之前轉儲的次數,0 指沒有備份,5 指保留5 個備份
dateext                                  使用當期日期作為命名格式
dateformat .%s                       配合dateext使用,緊跟在下一行出現,定義文件切割后的文件名,必須配合dateext使用,只支持 %Y %m %d %s 這四個參數
size(或minsize) log-size            當日志文件到達指定的大小時才轉儲,log-size能指定bytes(缺省)及KB (sizek)或MB(sizem).
當日志文件 >= log-size 的時候就轉儲。 以下為合法格式:(其他格式的單位大小寫沒有試過)
size = 5 或 size 5 (>= 5 個字節就轉儲)
size = 100k 或 size 100k
size = 100M 或 size 100M

  

實例

Nginx的配置

/var/log/nginx/*log {
    create 0664 nginx root
    daily
    rotate 10
    missingok
    notifempty
    compress
    sharedscripts
    postrotate
        /bin/kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true
    endscript
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM