logrotate介紹
對于Linux系統安全來說,日志文件是極其重要的工具。日志文件包含了關于系統中發生的事件的有用信息,在排障過程中或者系統性能分析時經常被用到。當日志文件不斷增長的時候,就需要定時切割,否則,寫日志的速度和性能也會下降,更不便于我們歸檔,查詢。
所以便有了使用logrotate的時候 ,logrotate是個十分有用的工具,它可以自動對日志進行截斷(或輪循)、壓縮以及刪除舊的日志文件。例如,你可以設置logrotate,讓/var/log/foo日志文件每30天輪循,并刪除超過6個月的日志。配置完后,logrotate的運作完全自動化,不必進行任何進一步的人為干預。
logrotate配置文件位置
Linux系統默認安裝logrotate工具,它默認的配置文件在:
/etc/logrotate.conf
/etc/logrotate.d/
logrotate.conf 才主要的配置文件,logrotate.d 是一個目錄,該目錄里的所有文件都會被主動的讀入/etc/logrotate.conf中執行。
另外,如果 /etc/logrotate.d/ 里面的文件中沒有設定一些細節,則會以/etc/logrotate.conf這個文件的設定來作為默認值。
實際運行時,Logrotate會調用配置文件/etc/logrotate.conf。
可以在/etc/logrotate.d目錄里放置自定義好的配置文件,用來覆蓋Logrotate的缺省值。
定時輪循機制
Logrotate是基于CRON來運行的,其腳本是/etc/cron.daily/logrotate,日志輪轉是系統自動完成的。
logrotate這個任務默認放在cron的每日定時任務cron.daily下面 /etc/cron.daily/logrotate
/etc/目錄下面還有cron.weekly/, cron.hourly/, cron.monthly/ 的目錄都是可以放定時任務的
[/etc]$ cat /etc/cron.daily/logrotate#!/bin/sh# Clean non existent log file entries from status filecd /var/lib/logrotatetest -e status || touch statushead -1 status > status.cleansed 's/"http://g' status | while read logfile datedo [ -e "$logfile" ] && echo "/"$logfile/" $date"done >> status.cleanmv status.clean statustest -x /usr/sbin/logrotate || exit 0/usr/sbin/logrotate /etc/logrotate.conf
這里實際操作輪詢的命令最后一行
/usr/sbin/logrotate /etc/logrotate.conf
定義好了每日執行任務的腳本cron.daily/logrotate ,再查看crontab的內容,里面設置好了對應的cron.xxly
執行時間
[/etc]$ vim /etc/crontabSHELL=/bin/shPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin# m h dom mon dow user command17 * * * * root cd / && run-parts --report /etc/cron.hourly25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
可以看出來了只要是在
/etc/cron.daily/ 下面的任務都是每天6:25 執行 /etc/cron.weekly/ 下面的任務都是每周日 6:47 執行 /etc/cron.monthly/ 下面的任務都是每月1號 6:52 執行如果等不及cron自動執行日志輪轉,想手動強制切割日志,需要加-f參數;
不過正式執行前最好通過Debug選項來驗證一下(-d參數),這對調試也很重要
# /usr/sbin/logrotate -f /etc/logrotate.d/nginx // 未到時間或者未到切割條件,強制切割# /usr/sbin/logrotate -d -f /etc/logrotate.d/nginx // 輸出切割debug信息
新聞熱點
疑難解答