perl按日期归档日志

简介:

帮一上海朋友工厂维护一台freebsd服务器,该服务器上运行着squid等服务。服务器上有一支perl程序会每天定时的切割当天的squid日志,以日期形式保存在某目录下,大体如下:

 
  1. -rw-r--r--  1 root  wheel   51827130 Aug 20 04:27 20110801.log 
  2. -rw-r--r--  1 root  wheel   56598624 Aug 20 04:27 20110802.log 
  3. -rw-r--r--  1 root  wheel   66925544 Aug 20 04:27 20110803.log 
  4. -rw-r--r--  1 root  wheel   47917440 Aug 20 04:27 20110804.log 
  5. -rw-r--r--  1 root  wheel   44134286 Aug 20 04:27 20110805.log 
  6. -rw-r--r--  1 root  wheel   43705704 Aug 20 04:27 20110808.log 
  7. -rw-r--r--  1 root  wheel   33358662 Aug 20 04:27 20110809.log 
  8. -rw-r--r--  1 root  wheel   35820354 Aug 20 04:27 20110810.log 
  9. -rw-r--r--  1 root  wheel   48065784 Aug 20 04:27 20110811.log 
  10. -rw-r--r--  1 root  wheel   38021175 Aug 20 04:27 20110812.log 
  11. -rw-r--r--  1 root  wheel   30382856 Aug 20 04:27 20110813.log 
  12. -rw-r--r--  1 root  wheel   11898255 Aug 20 04:27 20110815.log 
  13. -rw-r--r--  1 root  wheel   10068232 Aug 20 04:27 20110816.log 
  14. -rw-r--r--  1 root  wheel   12431556 Aug 20 04:27 20110817.log 
  15. -rw-r--r--  1 root  wheel    6405197 Aug 20 04:27 20110818.log 
  16. -rw-r--r--  1 root  wheel    5054207 Aug 20 04:27 20110819.log 
  17. -rw-r--r--  1 root  wheel    3455222 Aug 26 04:14 20110821.log 
  18. -rw-r--r--  1 root  wheel  124680376 Aug 26 04:14 20110822.log 
  19. -rw-r--r--  1 root  wheel  150105140 Aug 26 04:14 20110823.log 
  20. -rw-r--r--  1 root  wheel    5183330 Aug 26 04:14 20110824.log 
  21. -rw-r--r--  1 root  wheel    6486877 Aug 26 04:14 20110825.log 
  22. -rw-r--r--  1 root  wheel    8481735 Sep  2 04:03 20110828.log 
  23. -rw-r--r--  1 root  wheel   22789068 Sep  2 04:03 20110829.log 
  24. -rw-r--r--  1 root  wheel   68841800 Sep  2 04:03 20110830.log 

要求:编写一脚本程序,对该目录中日志以年月的形式进行归档,如201108.tar.gz

代码如下:

 
  1. #!/usr/bin/perl -w 
  2.  
  3. use strict; 
  4. use Shell qw/mv/; 
  5. use File::Path qw/remove_tree/; //调用该模块的目的是为了删除归档前的非空目录
  6.  
  7. my %log; 
  8.  
  9. if ( $< != 0 ) { 
  10.    printf "%s","You must run this script as root\n"; 
  11.  
  12. opendir LOG,'/data/squid_log' or die "$!\n"; 
  13.  
  14. while ( my $file = readdir LOG ) { 
  15.         chomp $file; 
  16.         next unless $file =~ /^(\d{6})\d+/; 
  17.         push @{$log{$1}},$file; 
  18.  
  19. closedir LOG; 
  20.  
  21. for my $str ( sort keys %log ) { 
  22.     my @array = @{$log{$str}}; 
  23.     mkdir $str,0755; 
  24.     my $sh = Shell->new(); 
  25.     $sh->mv("@array $str"); 
  26.     system("tar czvf ${str}.tar.gz $str"); 
  27.     remove_tree("$str",{ verbose => 1,}); 
  28.  

归档过程:

 
  1. a 201102 
  2. a 201102/20110213.log 
  3. a 201102/20110214.log 
  4. a 201102/20110218.log 
  5. a 201102/20110220.log 
  6. a 201102/20110221.log 
  7. a 201102/20110222.log 
  8. a 201102/20110223.log 
  9. a 201102/20110224.log 
  10. a 201102/20110225.log 
  11. a 201102/20110228.log 
  12. unlink 201102/20110213.log 
  13. unlink 201102/20110214.log 
  14. unlink 201102/20110218.log 
  15. unlink 201102/20110220.log 
  16. unlink 201102/20110221.log 
  17. unlink 201102/20110222.log 
  18. unlink 201102/20110223.log 
  19. unlink 201102/20110224.log 
  20. unlink 201102/20110225.log 
  21. unlink 201102/20110228.log 
  22. rmdir 201102 
  23. ……………………………………………………………………

最后归档后的效果:

 
  1. [/data/squid_log]# ll 
  2. total 203762 
  3. -rw-r--r--  1 root  wheel  12817056 Sep 16 20:49 201012.tar.gz 
  4. -rw-r--r--  1 root  wheel   8170954 Sep 16 20:49 201101.tar.gz 
  5. -rw-r--r--  1 root  wheel   8819026 Sep 16 20:49 201102.tar.gz 
  6. -rw-r--r--  1 root  wheel  15008666 Sep 16 20:49 201104.tar.gz 
  7. -rw-r--r--  1 root  wheel  10950252 Sep 16 20:49 201105.tar.gz 
  8. -rw-r--r--  1 root  wheel  70723508 Sep 16 20:50 201106.tar.gz 
  9. -rw-r--r--  1 root  wheel  13035446 Sep 16 20:50 201107.tar.gz 
  10. -rw-r--r--  1 root  wheel  63533990 Sep 16 20:51 201108.tar.gz 
  11. -rw-r--r--  1 root  wheel   5290849 Sep 16 20:51 201109.tar.gz 
  12. -rwx------  1 root  wheel       646 Sep 16 17:30 log.pl


本文转自dongfang_09859 51CTO博客,原文链接:http://blog.51cto.com/hellosa/666737,如需转载请自行联系原作者
相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
相关文章
|
存储 运维 应用服务中间件
[运维日志] Web 服务器日志依日期归档(Powershell 实现,附源代码)
[运维日志] Web 服务器日志依日期归档(Powershell 实现,附源代码)
264 0
|
11月前
|
安全 测试技术
【YashanDB知识库】设置归档日志上限,但归档日志没自动清理,导致磁盘空间满
客户在一主一备性能压测中设置了归档日志清理上下限(12G-16G),但实际产生了100G+归档日志,导致磁盘空间满。原因是未设置ARCH_CLEAN_IGNORE_MODE=BACKUP,系统默认在备份后才清理日志。解决方法是设置ARCH_CLEAN_IGNORE_MODE=BACKUP,并执行`alter database delete archivelog all`触发清理。修改参数后,日志仍可能短暂超过上限,因备机同步延迟。经验总结:需同时设置归档上下限和ARCH_CLEAN_IGNORE_MODE=BACKUP以确保日志及时清理。
|
10月前
|
存储 数据库
YashanDB归档日志文件管理
本文介绍了YashanDB中归档日志文件的管理,包括默认存储路径($YASDB_DATA/archive)和文件命名规则。单机部署格式为arch_{resetlogs_id}_{sequence}.ARC,共享集群新增instanceId字段,格式为arch{instanceId}_{resetlogs_id}_{sequence}.ARC。1号节点与单机格式一致。可通过V$ARCHIVED_LOG视图查询相关信息,文件的增删由归档管理操作控制,详情参见官方文档。
|
SQL Oracle 关系型数据库
oracle11g SAP测试机归档日志暴增排查(二)
oracle11g SAP测试机归档日志暴增排查(二)
726 1
|
Oracle 关系型数据库 Shell
oracle11g SAP测试机归档日志暴增排查(一)
oracle11g SAP测试机归档日志暴增排查(一)
323 1
|
11月前
|
SQL 数据库
【YashanDB知识库】归档日志清理
本文介绍了YashanDB中手动清理归档日志时遇到的问题及解决方法。问题源于在归档日志未备份或未同步到备机时尝试删除,导致文件仍存在。解决方案是通过调整`ARCH_CLEAN_IGNORE_MODE`参数(如设置为BOTH模式)来忽略备份和备机限制,执行归档日志清理命令(如`ALTER DATABASE DELETE ARCHIVELOG`)。同时,注意YashanDB支持自动清理功能,可通过设置上下阈值避免磁盘空间不足。相关参数可用`show parameter clean`查看。
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的控制文件与归档日志文件
本文介绍了Oracle数据库中的控制文件和归档日志文件。控制文件记录了数据库的物理结构信息,如数据库名、数据文件和联机日志文件的位置等。为了保护数据库,通常会进行控制文件的多路复用。归档日志文件是联机重做日志文件的副本,用于记录数据库的变更历史。文章还提供了相关SQL语句,帮助查看和设置数据库的日志模式。
329 1
【赵渝强老师】Oracle的控制文件与归档日志文件
|
SQL Oracle 关系型数据库
"揭秘!一键解锁Oracle日志清理魔法,让海量归档日志无处遁形,守护数据库健康,告别磁盘空间告急噩梦!"
【8月更文挑战第9天】随着Oracle数据库在企业应用中的普及,归档日志管理对保持数据库健康至关重要。归档日志记录所有更改,对数据恢复极为重要,但也可能迅速占用大量磁盘空间影响性能。利用Oracle提供的RMAN工具,可通过编写Shell脚本来自动清理归档日志。脚本包括设置环境变量、连接数据库、检查和删除指定时间前的日志,并记录执行情况。通过Cron作业定时运行脚本,可有效管理日志文件,确保数据库稳定运行。
671 7
|
SQL Oracle NoSQL
实时计算 Flink版操作报错合集之报错“找不到对应的归档日志文件”,怎么处理
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
存储 SQL Oracle
关系型数据库Oracle归档日志备份
【7月更文挑战第19天】
437 5