linux 按天切割日誌(logrotate)

logrotate 程序是一個日誌文件管理工具。用來把舊的日誌文件刪除,並創建新的日誌文件,我們把它叫做“轉儲”。我們可以根據日誌文件的大小,也可以根據其天數來轉儲,這個過程一般通過 cron 程序來執行

安裝後系統會定時運行logrotate,一般是每天一次。系統是這麼實現按天執行的。crontab會每天定時執行/etc/cron.daily目錄下的腳本,而這個目錄下有個文件叫logrotate。在centos上腳本內容是這樣的:

/usr/sbin/logrotate /etc/logrotate.conf >/dev/null 2>&1
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0

此文件中只是執行了logrotate命令,然後傳遞一個配置參數。我們可以新建自己的腳本來執行logrotate命令,然後把腳本加入crontab中,就可以自定義文件分割了。

logrotate參數

logrotate參數說明

compress 通過gzip 壓縮轉儲以後的日誌
nocompress 不做gzip壓縮處理
create mode owner group 輪轉時指定創建新文件的屬性,如create 0777 nobody nobody
nocreate 不建立新的日誌文件
delaycompress 和compress 一起使用時,轉儲的日誌文件到下一次轉儲時才壓縮
nodelaycompress 覆蓋 delaycompress 選項,轉儲同時壓縮。
missingok 如果日誌丟失,不報錯繼續滾動下一個日誌
ifempty 即使日誌文件爲空文件也做輪轉,這個是logrotate的缺省選項。
notifempty 當日志文件爲空時,不進行輪轉
mail address 把轉儲的日誌文件發送到指定的E-mail 地址
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

實戰

在logrotate.d下面新建一個文件,文件名隨意
如下內容,日誌路徑根據自己的修改

/data/nginx/log/*.log {
        su root root
        rotate 180
        daily
        copytruncate
        dateformat .%Y%m%d
        compress
        notifempty
        missingok
}

執行下面的命令測試一把

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

如果沒有成功,再執行下面的命令排查問題

/usr/sbin/logrotate -v -f -d /etc/logrotate.d/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章