日誌切分神器--logrotate

Blog:博客園 我的nginx

概述

還在本身寫定時切分日誌的腳本?試試系統自帶的logrotate工具吧!bash

logrotate是一個日誌文件管理工具。用於分割日誌文件,刪除舊的日誌文件,並建立新的日誌文件,起到轉儲的做用,便於節省磁盤空間。工具

配置

配置文件

Linux系統默認安裝logrotate,默認配置文件以下:post

  • /etc/logrotate.conf:主配置文件,logrotate.d是一個目錄,該目錄裏的全部文件都會被主動的讀入/etc/logrotate.conf中執行。
  • /etc/logrotate.d/:用於存放不一樣程序自定義切分配置

運行原理

Logrotate是基於CRON來運行的,其腳本是/etc/cron.daily/logrotate,日誌輪轉是系統自動完成的。測試

實際運行時,Logrotate會調用配置文件/etc/logrotate.conf。能夠在/etc/logrotate.d目錄裏放置自定義好的配置文件,用來覆蓋Logrotate的缺省值。debug

/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 $EXITVALUE

配置參數說明

配置參數 說明
create 自動建立新的日誌文件,新的日誌文件具備和原來的文件相同的權限;由於日誌被更名,所以要建立一個新的來繼續存儲以前的日誌
rotate n 保留多少個日誌文件(輪轉幾回),n能夠是0,1,2,3...,若是n爲0,則沒有備份。
dateext 就是切割後的日誌文件以當前日期爲格式結尾
compress 是否經過gzip壓縮轉儲之後的日誌文件,如xxx.log-20201111.gz
nocompress 不作gzip壓縮處理,與compress互斥
missingok 在日誌輪循期間,任何錯誤將被忽略,例如「文件沒法找到」之類的錯誤。
notifempty 若是日誌文件爲空,輪循不會進行。
create 0664 nginx root 以指定的權限建立全新的日誌文件,同時logrotate也會重命名原始日誌文件。
postrotate 在全部其它指令完成後,postrotate裏面指定的命令將被執行。

lograte命令

語法格式以下:code

logrotate [OPTION...] <configfile>

參數說明

參數 說明
-d debug模式,測試配置文件是否有錯誤。
-f 強制轉儲文件。
-m 壓縮日誌後,發送日誌到指定郵箱。
-s 使用指定的狀態文件。
-v 顯示轉儲過程。

案例

以nginx日誌切分爲例,建立/etc/logrotate.d/nginxorm

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

手動強制切分日誌:blog

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

效果以下:

image-20201112110725767

相關文章
相關標籤/搜索