帮一上海朋友工厂维护一台freebsd服务器,该服务器上运行着squID等服务。服务器上有一支perl程序会每天定时的切割当天的squID日志,以日期形式保存在某目录下,大体如下:
-rw-r--r-- 1 root wheel 51827130 Aug 20 04:27 20110801.log -rw-r--r-- 1 root wheel 56598624 Aug 20 04:27 20110802.log -rw-r--r-- 1 root wheel 66925544 Aug 20 04:27 20110803.log -rw-r--r-- 1 root wheel 47917440 Aug 20 04:27 20110804.log -rw-r--r-- 1 root wheel 44134286 Aug 20 04:27 20110805.log -rw-r--r-- 1 root wheel 43705704 Aug 20 04:27 20110808.log -rw-r--r-- 1 root wheel 33358662 Aug 20 04:27 20110809.log -rw-r--r-- 1 root wheel 35820354 Aug 20 04:27 20110810.log -rw-r--r-- 1 root wheel 48065784 Aug 20 04:27 20110811.log -rw-r--r-- 1 root wheel 38021175 Aug 20 04:27 20110812.log -rw-r--r-- 1 root wheel 30382856 Aug 20 04:27 20110813.log -rw-r--r-- 1 root wheel 11898255 Aug 20 04:27 20110815.log -rw-r--r-- 1 root wheel 10068232 Aug 20 04:27 20110816.log -rw-r--r-- 1 root wheel 12431556 Aug 20 04:27 20110817.log -rw-r--r-- 1 root wheel 6405197 Aug 20 04:27 20110818.log -rw-r--r-- 1 root wheel 5054207 Aug 20 04:27 20110819.log -rw-r--r-- 1 root wheel 3455222 Aug 26 04:14 20110821.log -rw-r--r-- 1 root wheel 124680376 Aug 26 04:14 20110822.log -rw-r--r-- 1 root wheel 150105140 Aug 26 04:14 20110823.log -rw-r--r-- 1 root wheel 5183330 Aug 26 04:14 20110824.log -rw-r--r-- 1 root wheel 6486877 Aug 26 04:14 20110825.log -rw-r--r-- 1 root wheel 8481735 Sep 2 04:03 20110828.log -rw-r--r-- 1 root wheel 22789068 Sep 2 04:03 20110829.log -rw-r--r-- 1 root wheel 68841800 Sep 2 04:03 20110830.log
要求:编写一脚本程序,对该目录中日志以年月的形式进行归档,如201108.tar.gz
代码如下:
#!/usr/bin/perl -w use strict; use Shell qw/mv/; use file::Path qw/remove_tree/; //调用该模块的目的是为了删除归档前的非空目录 my %log; if ( $< != 0 ) { printf "%s","You must run this script as root\n"; } opendir LOG,'/data/squID_log' or dIE "$!\n"; while ( my $file = readdir LOG ) { chomp $file; next unless $file =~ /^(\d{6})\d+/; push @{$log{}},$file; } closedir LOG; for my $str ( sort keys %log ) { my @array = @{$log{$str}}; mkdir $str,0755; my $sh = Shell->new(); $sh->mv("@array $str"); system("tar czvf ${str}.tar.gz $str"); remove_tree("$str",{ verbose => 1,}); }
归档过程:
a 201102 a 201102/20110213.log a 201102/20110214.log a 201102/20110218.log a 201102/20110220.log a 201102/20110221.log a 201102/20110222.log a 201102/20110223.log a 201102/20110224.log a 201102/20110225.log a 201102/20110228.log unlink 201102/20110213.log unlink 201102/20110214.log unlink 201102/20110218.log unlink 201102/20110220.log unlink 201102/20110221.log unlink 201102/20110222.log unlink 201102/20110223.log unlink 201102/20110224.log unlink 201102/20110225.log unlink 201102/20110228.log rmdir 201102 ……………………………………………………………………
最后归档后的效果:
[/data/squID_log]# ll total 203762 -rw-r--r-- 1 root wheel 12817056 Sep 16 20:49 201012.tar.gz -rw-r--r-- 1 root wheel 8170954 Sep 16 20:49 201101.tar.gz -rw-r--r-- 1 root wheel 8819026 Sep 16 20:49 201102.tar.gz -rw-r--r-- 1 root wheel 15008666 Sep 16 20:49 201104.tar.gz -rw-r--r-- 1 root wheel 10950252 Sep 16 20:49 201105.tar.gz -rw-r--r-- 1 root wheel 70723508 Sep 16 20:50 201106.tar.gz -rw-r--r-- 1 root wheel 13035446 Sep 16 20:50 201107.tar.gz -rw-r--r-- 1 root wheel 63533990 Sep 16 20:51 201108.tar.gz -rw-r--r-- 1 root wheel 5290849 Sep 16 20:51 201109.tar.gz -rwx------ 1 root wheel 646 Sep 16 17:30 log.pl总结
以上是内存溢出为你收集整理的perl按日期归档日志全部内容,希望文章能够帮你解决perl按日期归档日志所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)