logrotate 幫忙你定期整理 log, 像是壓縮起來, 或是清理掉過期的檔案, 才能避免硬碟因為過多的 log 而再也不能寫入, 鳥哥的文章也寫的很清楚
http://linux.vbird.org/linux_basic/0570syslog.php#rotate
但 logrotate 也是有不能處理的狀況
狀況 1:log 檔的檔名不固定
最近在使用 graphite-carbon, 他內部有自己 rotate log 檔的機制, 所以當你打開 /var/log/carbon/ 時, 他的檔案可能像這樣
但他沒有做壓縮, 也沒有定期清除過期的檔案, 所以你還是想加一條 rule 進去 logrotate
所以我試著加入這個 rule, 執行 logrotate -f graphite-carbon, 結果看起來很理想, 會把檔案壓縮起來
然而隔幾天再來看的時候, 卻發現沒有發揮作用, 查了半天後才發現這是 logrotate 的機制
http://serverfault.com/questions/388066/logrotate-not-working
http://serverfault.com/questions/375004/logrotate-not-rotating-the-logs
在做 rotate 之前, 他會檢查 /var/lib/logrotate/status 內的日期, 如果距離上一次檢查的日期不到你指定的時間, ex daily => 一天以上, 那他是不會被 rotate 的, 所以你加入新機制的第一天, 在 status 內因為沒有紀錄, 所以他是不會發揮作用的, 第一天他唯一做的事是在 status 內加上一筆 record, 第二天之後才會正常運作. 那因為 carbon 每天產生的 log 檔名不是一致的, 所以在 status 內不可能有紀錄, 總要再多等一天才會被壓縮起來, 如果不能接受的話就可以改用 cron.daily 來執行, 就可以達到原本想要的效果
logrotate Debug 指令
http://linux.vbird.org/linux_basic/0570syslog.php#rotate
但 logrotate 也是有不能處理的狀況
狀況 1:log 檔的檔名不固定
最近在使用 graphite-carbon, 他內部有自己 rotate log 檔的機制, 所以當你打開 /var/log/carbon/ 時, 他的檔案可能像這樣
但他沒有做壓縮, 也沒有定期清除過期的檔案, 所以你還是想加一條 rule 進去 logrotate
/var/log/carbon$ ll total 575048 drwxr-xr-x 2 www-data www-data 12288 Jul 11 00:03 ./ drwxr-xr-x 3 www-data www-data 4096 Jun 4 04:23 ../ -rw-r--r-- 1 www-data www-data 10673 Jul 11 03:47 console.log -rw-r--r-- 1 www-data www-data 75481 Jul 10 23:59 console.log.2013_7_10 -rw-r--r-- 1 www-data www-data 83080 Jul 9 23:58 console.log.2013_7_9 -rw-r--r-- 1 www-data www-data 13303 Jul 8 23:59 console.log.2013_7_8 -rw-r--r-- 1 www-data www-data 300053 Jul 11 03:47 creates.log -rw-r--r-- 1 www-data www-data 2356541 Jul 10 23:59 creates.log.2013_7_10 -rw-r--r-- 1 www-data www-data 2930068 Jul 9 23:59 creates.log.2013_7_9 -rw-r--r-- 1 www-data www-data 198027 Jul 8 23:59 creates.log.2013_7_8 -rw-r--r-- 1 www-data www-data 1799225 Jul 11 03:47 listener.log -rw-r--r-- 1 www-data www-data 11544506 Jul 10 23:59 listener.log.2013_7_10 -rw-r--r-- 1 www-data www-data 11706873 Jul 9 23:59 listener.log.2013_7_9 -rw-r--r-- 1 www-data www-data 568164 Jul 8 23:59 listener.log.2013_7_8 -rw-r--r-- 1 www-data www-data 45003650 Jul 11 03:47 query.log -rw-r--r-- 1 www-data www-data 278004661 Jul 10 23:59 query.log.2013_7_10 -rw-r--r-- 1 www-data www-data 234139329 Jul 9 23:59 query.log.2013_7_9 -rw-r--r-- 1 www-data www-data 12797 Jul 8 23:59 query.log.2013_7_8
所以我試著加入這個 rule, 執行 logrotate -f graphite-carbon, 結果看起來很理想, 會把檔案壓縮起來
/var/log/carbon/*/*.log.*[!gz] { daily rotate 1 compress missingok nocreate }
然而隔幾天再來看的時候, 卻發現沒有發揮作用, 查了半天後才發現這是 logrotate 的機制
http://serverfault.com/questions/388066/logrotate-not-working
http://serverfault.com/questions/375004/logrotate-not-rotating-the-logs
在做 rotate 之前, 他會檢查 /var/lib/logrotate/status 內的日期, 如果距離上一次檢查的日期不到你指定的時間, ex daily => 一天以上, 那他是不會被 rotate 的, 所以你加入新機制的第一天, 在 status 內因為沒有紀錄, 所以他是不會發揮作用的, 第一天他唯一做的事是在 status 內加上一筆 record, 第二天之後才會正常運作. 那因為 carbon 每天產生的 log 檔名不是一致的, 所以在 status 內不可能有紀錄, 總要再多等一天才會被壓縮起來, 如果不能接受的話就可以改用 cron.daily 來執行, 就可以達到原本想要的效果
logrotate Debug 指令
# 執行一次並且把結果寫入 status, -v 把詳細的過程印出來 /usr/sbin/logrotate -v /etc/logrotate.conf # 模擬執行一次, /usr/sbin/logrotate -d /etc/logrotate.conf
沒有留言:
張貼留言