Chinaunix首页 | 论坛 | 博客
  • 博客访问: 337288
  • 博文数量: 31
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1134
  • 用 户 组: 普通用户
  • 注册时间: 2013-08-25 09:41
个人简介

目前任职于搜狐~

文章分类

全部博文(31)

文章存档

2014年(12)

2013年(19)

分类: 系统运维

2013-08-27 19:17:34

现在所做的系统每一小时生成一个日志文件,由于日志量较大,用Shell实现了一个日志打包的功能。
我们系统生成日志文件名称格式为:all.log.2013-08-27-14 表示2013-08-27 14:00的日志。

1、第一个脚本: logcompress.sh
在crontab下配置脚本定时执行,由于5天内的日志需要经常查看,以便处理问题。所以该脚本每天执行一次,
打包当前时间之前第五天的日志,如当前时间为2013-08-27,脚本每天凌晨01:00执行,打包2013-08-22的日志文件。
crontab配置格式如下:
0 1 * * * cd /log/eas/all && /app/logcompress/logcompress.sh >> /log/logcompress/logcompress.log

点击(此处)折叠或打开

  1. #! /bin/bash
  2. name=`date +%Y-%m-%d --date='5 days ago'`;
  3. echo `date '+%Y-%m-%d %H:%M:%S'`" 打包程序执行开始!";
  4. echo '---'$name'日志打包开始!---';
  5. for((i=0;i<24;i++))
  6. do
  7. if [ $i -lt 10 ]
  8. then
  9. if [ -f all.log.$name-0$i ]
  10. then
  11. echo "tar:all.log.$name-0$i => all.$name-0$i.tar.gz";
  12. tar zcf all.$name-0$i.tar.gz all.log.$name-0$i;
  13. if [ -f all.$name-0$i.tar.gz ]
  14. then
  15. echo "rm:all.log.$name-0$i";
  16. rm -rf all.log.$name-0$i;
  17. fi;
  18. sleep 10;
  19. fi;
  20. else
  21. if [ -f all.log.$name-$i ]
  22. then
  23. echo "tar:all.log.$name-$i => all.$name-$i.tar.gz";
  24. tar zcf all.$name-$i.tar.gz all.log.$name-$i;
  25. if [ -f all.$name-$i.tar.gz ]
  26. then
  27. echo "rm:all.log.$name-$i";
  28. rm -rf all.log.$name-$i;
  29. fi;
  30. sleep 10;
  31. fi;
  32. fi;
  33. done;
  34. echo '---'$name'日志打包完成!---';
  35. echo `date '+%Y-%m-%d %H:%M:%S'`" 打包程序执行完成!";

2、prior_logcompress.sh
该脚本用于打包历史日志文件,系统日志名称格式为:all.log.2013-08-27-14,在服务器日志目录下,手动执行该脚本。
命令格式为:./prior_logcompress.sh 20130827 30 (表示打包2013-08-27之前30天的所有日志文件)

点击(此处)折叠或打开

  1. #!/bin/bash
  2. c_logcompress(){
  3. name=$1;
  4. echo '---'$name'日志打包开始!---';
  5. for((i=0;i<24;i++))
  6. do
  7. if [ $i -lt 10 ]
  8. then
  9. if [ -f all.log.$name-0$i ]
  10. then
  11. echo "tar:all.log.$name-0$i => all.$name-0$i.tar.gz";
  12. tar zcf all.$name-0$i.tar.gz all.log.$name-0$i;
  13. if [ -f all.$name-0$i.tar.gz ]
  14. then
  15. echo "rm:all.log.$name-0$i";
  16. rm -rf all.log.$name-0$i;
  17. fi;
  18. sleep 5;
  19. fi;
  20. else
  21. if [ -f all.log.$name-$i ]
  22. then
  23. echo "tar:all.log.$name-$i => all.$name-$i.tar.gz";
  24. tar zcf all.$name-$i.tar.gz all.log.$name-$i;
  25. if [ -f all.$name-$i.tar.gz ]
  26. then
  27. echo "rm:all.log.$name-$i";
  28. rm -rf all.log.$name-$i;
  29. fi;
  30. sleep 5;
  31. fi;
  32. fi;
  33. done;
  34. echo '---'$name'日志打包完成!---';
  35. sleep 60;
  36. }
  37. c_exit(){
  38. echo '-----------------------------';
  39. if [ $# -lt 1 ]
  40. then
  41. echo `date '+%Y-%m-%d %H:%M:%S'` '打包程序执行结束!';
  42. else
  43. echo `date '+%Y-%m-%d %H:%M:%S'` '打包程序执行退出!';
  44. fi
  45. exit;
  46. }
  47. echo `date '+%Y-%m-%d %H:%M:%S'` '打包程序执行开始!';
  48. echo '-----------------------------';
  49. if [ $# -lt 1 ]
  50. then
  51. echo '请输入打包日志日期参数(格式如:20130701)!';
  52. c_exit 1;
  53. fi;
  54. endDate='';
  55. day='';
  56. if [ $1 ]
  57. then
  58. endDate=$1;
  59. fi;
  60. if [ $2 ]
  61. then
  62. day=$2;
  63. else
  64. day=0;
  65. fi;
  66. if [ $day -eq 0 ]
  67. then
  68. echo '开始执行'$endDate'的日志打包操作!';
  69. else
  70. echo '开始执行'$endDate'之前'$day'天的日志打包操作!';
  71. fi;
  72. for((k=0;k<$day+1;k++));
  73. do
  74. tim=`date '+%Y-%m-%d' -d "-$k day $endDate"`;
  75. c_logcompress $tim;
  76. done
  77. c_exit 0;


 

阅读(8478) | 评论(3) | 转发(0) |
给主人留下些什么吧!~~

start4u2013-08-28 17:22:36

我之前也实现了一个  后面发现在业务机上面用tar命令很耗CPU,后来打算改成在业务机上面写个脚本用scp把日志拷到非业务机上面然后在执行这个日志打包脚本

玄宁_dlcdv2013-08-28 14:50:08

好久没写脚本了,学习+复习

bxuu1582013-08-28 13:50:32

还行吧,不错