logrotate工具的介紹
logrotate是一個linux系統日志的管理工具。可以對單個日志文件或者某個目錄下的文件按時間/大小進行切割,壓縮操作;指定日志保存數量;還可以在切割之后運行自定義命令。
logrotate是基於crontab運行的,所以這個時間點是由crontab控制的,具體可以查詢crontab的配置文件/etc/anacrontab。系統會按照計划的頻率運行logrotate,通常是每天。在大多數的Linux發行版本上,計划每天運行的腳本位於 /etc/cron.daily/logrotate。
1、配置文件介紹
Linux系統默認安裝logrotate工具,它默認的配置文件在:
主配置文件: /etc/logrotate.conf 目錄:/etc/logrotate.d/ logrotate 歷史: /var/lib/logrotate.status
logrotate.conf 是 logrotate 的主配置文件,logrotate.d 是一個目錄,該目錄里的所有文件都會被主動的讀入/etc/logrotate.conf中執行,另外,如果 /etc/logrotate.d/ 里面的文件中沒有設定一些細節,則會以/etc/logrotate.conf這個文件的設定來作為默認值。
logrotate 定義日志信息配置選項:
compress --> 壓縮日志文件的所有非當前版本 daily,weekly,monthly --> 按指定計划輪換日志文件 delaycompress --> 壓縮所有版本,除了當前和下一個最近的 endscript --> 標記 prerotate 或 postrotate 腳本的結束 errors "emailid" --> 給指定郵箱發送錯誤通知 missingok --> 如果日志文件丟失,不要顯示錯誤 notifempty --> 如果日志文件為空,則不輪換日志文件 olddir "dir" --> 指定日志文件的舊版本放在 “dir” 中 postrotate --> 引入一個在日志被輪換后執行的腳本 prerotate --> 引入一個在日志被輪換前執行的腳本 rotate 'n' --> 在輪換方案中包含日志的 n 個版本 sharedscripts --> 對於整個日志組只運行一次腳本 size='logsize' --> 在日志大小大於 logsize(例如 100K,4M)時輪換
logrotate 命令格式:
logrotate [OPTION...] <configfile> -d, --debug :debug模式,測試配置文件是否有錯誤。 -f, --force :強制轉儲文件。 -m, --mail=command :壓縮日志后,發送日志到指定郵箱。 -s, --state=statefile :使用指定的狀態文件。 -v, --verbose :顯示轉儲過程。
配置
讓我們為我們自己的示例日志文件 /tmp/sample.log 配置 logrotate.
第一步:在 /etc/logrotate.d/目錄中添加一下文件,其中test為文件名稱,可以根據服務自定義.
# vim /etc/logrotate.d/test # Logrotate file for test /tmp/sample_output.log { missingok monthly create 0600 ofm ofm rotate 1
dateext
}
在上面的配置文件中:
size 1k - logrotate 僅在文件大小等於(或大於)此大小時運行。
create - 輪換原始文件並創建具有指定權限、用戶和組的新文件。
rotate - 限制日志文件輪轉的數量。因此,這將只保留最近的 4 個輪轉的日志文件。
compress - 這將壓縮文件。
dateext - 這個參數很重要!就是切割后的日志文件以當前日期為格式結尾,如xxx.log-20131216這樣,如果注釋掉,切割出來是按數字遞增,即前面說的 xxx.log-1這種格式.
第二步:通常,你需要等待一天才能等到 logrotate 由 /etc/cron.daily 執行。除此之外,你可以用下面的命令在命令行中運行:
# /usr/sbin/logrotate -f /etc/logrotate.d/test
# /usr/sbin/logrotate -d -f /etc/logrotate.d/test
想手動強制切割日志,需要加-f參數;不過正式執行前最好通過Debug選項來驗證一下(-d參數),這對調試也很重要。
在執行 logrotate 之后查看日志是否被切割.
# /usr/sbin/logrotate -f /etc/logrotate.d/test # ll /tmp -rw------- 1 ofm ofm 0 Aug 12 15:53 sample.log -rw------- 1 root root 216014 Aug 12 15:53 sample.log.1.gz
這樣就能確認 logrotate 成功實現了。
#cat /etc/logrotate.conf weekly //默認每一周執行一次rotate輪轉工作 rotate 4 //保留多少個日志文件(輪轉幾次).默認保留四個.就是指定日志文件刪除之前輪轉的次數,0 指沒有備份 create //自動創建新的日志文件,新的日志文件具有和原來的文件相同的權限;因為日志被改名,因此要創建一個新的來繼續存儲之前的日志 dateext //這個參數很重要!就是切割后的日志文件以當前日期為格式結尾,如xxx.log-20131216這樣,如果注釋掉,切割出來是按數字遞增,即前面說的 xxx.log-1這種格式 compress //是否通過gzip壓縮轉儲以后的日志文件,如xxx.log-20131216.gz ;如果不需要壓縮,注釋掉就行 include /etc/logrotate.d # 將 /etc/logrotate.d/ 目錄中的所有文件都加載進來 /var/log/wtmp { //僅針對 /var/log/wtmp 所設定的參數 monthly //每月一次切割,取代默認的一周 minsize 1M //文件大小超過 1M 后才會切割 create 0664 root utmp //指定新建的日志文件權限以及所屬用戶和組 rotate 1 //只保留一個日志. } # 這個 wtmp 可記錄用戶登錄系統及系統重啟的時間 # 因為有 minsize 的參數,因此不見得每個月一定會執行一次喔.要看文件大小。
小示例:下面一個切割nginx日志的配置
# vim /etc/logrotate.d/nginx /usr/local/nginx/logs/*.log { daily rotate 7 missingok notifempty dateext sharedscripts postrotate if [ -f /usr/local/nginx/logs/nginx.pid ]; then kill -USR1 `cat /usr/local/nginx/logs/nginx.pid` fi endscript }
參考文檔:https://www.cnblogs.com/txlsz/p/13126723.html