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