堕落不振功业废,勤耕不辍日月新

[Perl Script] – 自動刪除 Apache 舊記錄檔

Apache hailen 321℃

上一篇文章 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 舊記錄檔

喜欢 (0)or分享 (0)