天天看點

Linux日志管理神器logrotate

logrotate 是一個 Bash 的 SHELL 腳本,可對日志檔案進行切分,并将切分後的日志放在統一目錄。

系統預設安裝logrotate工具,主配置檔案為/etc/logrotate.conf,一般我們會将配置檔案放在/etc/logrotate.d/目錄下。

logrotate配置檔案參數解釋:

daily/weekly/monthly/yearly:轉儲周期,每天、每周、每月、每年,任選其一,一般都是以”天“為周期

rotate 12:保留12個曆史log版本

dateext:切割後的log檔案以目前日期格式結尾(即xxx.log-20190401),如果注釋掉,則是以數字方式遞增結尾(即xxx.log.1)

compress:使用gzip壓縮轉儲後的log,日志切割後自動壓縮,壓縮字尾為.gz

delaycompress:與compress選項一起使用,delaycompress訓示logrotate不要将最近的日志壓縮,壓縮在下一次輪詢周期進行。

missingok:忽略錯誤

notifempty:如果log是空,不轉儲

create 0664 www www:指定權限建立全新的log檔案

logrotate指令幾個常用的參數:

-d:debug模式,用于測試配置檔案是否有錯誤

-f:強制執行log轉儲,即手動觸發

-v:顯示執行過程

-m:發送log到指定郵箱

例:手動執行log轉儲

logrotate -fv /etc/logrotate.d/mysql-log-rotate

這裡以nginx和mysql舉兩個示例,可以根據自身情況修改使用

vi /etc/logrotate.d/nginx

1

vi /etc/logrotate.d/nginx

/var/log/nginx/*.log {

#create 0644 www www

daily

rotate 7

missingok

notifempty

compress

dateext

delaycompress

sharedscripts

postrotate

/bin/kill -USR1

cat /var/log/nginx/nginx.pid 2>/dev/null

2>/dev/null || true

endscript

}

vi /etc/logrotate.d/mysql

/usr/local/mysql/log/mysql*.log {

#create 600 mysql mysql

notifempty

daily

rotate 30

missingok

compress

dateext

delaycompress

sharedscripts

postrotate

/usr/local/mysql/bin/mysqladmin -uroot -p’password’ flush-logs

endscript

}

允許為單個配置指定多個日志檔案,例如

/var/log/httpd/access.log

/var/log/httpd/error.log

/var/log/httpd/mysite/*.log

{

rotate 5

mail [email protected]

size 100k

sharedscripts

postrotate

/usr/bin/killall -HUP httpd

endscript

}

檢視logrotate定時執行配置:

cat /etc/anacrontab

強制執行logrotate指令:

logrotate -vf /etc/logrotate.d/mmmmmm

繼續閱讀