上一篇文章 Apache Log Rotate 設定 講述了 Apache 輪替記錄檔的方法, 但如果舊日誌一直不理的話, 同樣佔據碟碟空間, 因為 Apache 不會刪除舊記錄檔, 而且將新記錄寫入新建立的檔案, 以下 Perl Script 可以自動刪除舊記錄檔, 只要設定好記錄檔目錄, 名稱後, 放到 crontab 執行便可以了。
#!/usr/bin/perl ############################################################################### # Name: rotatelog.pl # Author: Sam Tang # Website: http://www.phpini.com/ # Purpose: auto delete old logs files ############################################################################### use strict; use warnings; no warnings 'numeric'; # disable Argument "XXX" isn't numeric warning my $dir = "/var/log/httpd/"; # apache log 目錄 my $access_substr = "access-"; # access log 檔名開始字串 my $error_substr = "error-"; # error log 檔名開始字串 my $expire_log = "10w"; # 保留記錄檔時間, 預設以日為單位, 10w 代表 10 星期 ### convert expire log weeks to days $expire_log = lc($expire_log); # support uppercase and lowercase characters if (substr($expire_log, -1) eq "w") { $expire_log = int($expire_log) * 7; } else { $expire_log = int($expire_log); } ### open directory and delete old logs opendir (my $fp, $dir) or die $!; while (my $file = readdir($fp)) { if ((index($file, $access_substr) != -1 or index($file, $error_substr) != -1) && -M $dir.$file > $expire_log) { unlink $dir.$file; } }
這個 Perl Script 會掃瞄記錄檔目錄, 並查看檔案名稱為是 access log 及 error log 的檔案, 並檢查檔案的時間是否超過設定的時間, 太舊的檔案便會刪除。
转载请注明:我是IT » [Perl Script] – 自動刪除 Apache 舊記錄檔