上一篇文章 Apache Log Rotate 设定 讲述了 Apache 轮替记录档的方法, 但如果旧日志一直不理的话, 同样占据碟碟空间, 因为 Apache 不会删除旧记录档, 而且将新记录写入新建立的档案, 以下 Perl Script 可以自动删除旧记录档, 只要设定好记录档目录, 名称后, 放到 crontab 执行便可以了。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
#!/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 的档案, 并检查档案的时间是否超过设定的时间, 太旧的档案便会删除。