免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3413 | 回复: 11
打印 上一主题 下一主题

[文本处理] 系统日志按时间切割 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-02-27 18:19 |只看该作者 |倒序浏览
线上服务器产出的log如下:
  1. 2013-02-26 14:00:56 ox-90 sid_1_Gam1: useItem, host=3, idx=16, deid=92232, tick=19092654
  2. 2013-02-26 14:00:56 ox-90 sid_1_Gam1: itemUpdateNum,sn=18htqm70b000
复制代码
现在需要日志的时间每10分切割为另一个文件。我写了以下一个脚本,单独运行时可行。但是放到crontab之后却有时切割正确,有时却得不到数。
  1. #!/bin/bash

  2. export till_time=$(date -d "10 minutes ago" +%T)
  3. export from_time=$(date -d "20 minutes ago" +%T)

  4. test -e /tmp/$from_time.log | touch /tmp/$from_time.log

  5. sed -n '/'"$from_time"'/,/'"$till_time"'/p' /var/log/localB.log >> /tmp/$from_time.log
复制代码
crontab:
  1. */10 * * * * /tmp/cut_log.sh
复制代码
上面的方法哪里写出问题?
还有什么方法满足把日志按时间每10分钟切割为另一个文件?
求大神解答

论坛徽章:
0
2 [报告]
发表于 2013-02-28 08:24 |只看该作者
本帖最后由 todayhero 于 2013-02-28 10:19 编辑

@枫之歌
  1. */10 * * * * sh -x /tmp/cut_log.sh >> /var/log/cut_log.log 2>&1&
复制代码
通过上面的命令,查看每次执行的日志全部记录下来,看看问题出现在哪里,再找解决办法。

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
3 [报告]
发表于 2013-02-28 09:46 |只看该作者
本帖最后由 关阴月飞 于 2013-02-28 09:48 编辑

回复 1# 枫之歌

可以直接每隔10分钟把日志cat 到一个文件中, 再清空原日志即可.
  1. */10 * * * *  cat /var/log/localB.log >$(date +%F-%T).log  &&  >/var/log/localB.log
复制代码

论坛徽章:
0
4 [报告]
发表于 2013-02-28 10:12 |只看该作者
回复 2# todayhero


    在/tmp目录下确实有生成了09:38:01.log这样的文件,但是空的。cut_log.log也是空的

论坛徽章:
0
5 [报告]
发表于 2013-02-28 10:14 |只看该作者
回复 3# 关阴月飞


    原日志文件localB.log不能清空,不能做改动,系统会对它做轮替。

论坛徽章:
0
6 [报告]
发表于 2013-02-28 10:21 |只看该作者
  1. */10 * * * * sh -x /tmp/cut_log.sh >> /var/log/cut_log.log 2>&1&
复制代码
后面加2>&1&

错误信息也都写入到日志中。

回复 4# 枫之歌


   

论坛徽章:
0
7 [报告]
发表于 2013-02-28 10:47 |只看该作者
回复 6# todayhero

重新编辑crontab后得出第一个结果log正常,第二个第三个就成了空文件了。
下面是cut_log.log的记录。看不出问题来
  1. + sed -n /10:12:01/,/10:22:01/p /var/log/localB.log
  2. + date -d 10 minutes ago +%T
  3. + export till_time=10:24:01
  4. + date -d 20 minutes ago +%T
  5. + export from_time=10:14:01
  6. + + touch /tmp/10:14:01.log
  7. test -e /tmp/10:14:01.log
  8. + sed -n /10:14:01/,/10:24:01/p /var/log/localB.log
  9. + date -d 10 minutes ago +%T
  10. + export till_time=10:25:01
  11. + date -d 20 minutes ago +%T
  12. + export from_time=10:15:01
  13. + test -e /tmp/10:15:01.log
  14. + touch /tmp/10:15:01.log
  15. + sed -n /10:15:01/,/10:25:01/p /var/log/localB.log
  16. + date -d 10 minutes ago +%T
  17. + export till_time=10:26:01
  18. + date -d 20 minutes ago +%T
  19. + export from_time=10:16:01
  20. + test -e /tmp/10:16:01.log
  21. + touch /tmp/10:16:01.log
  22. + sed -n /10:16:01/,/10:26:01/p /var/log/localB.log
复制代码

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
8 [报告]
发表于 2013-02-28 13:22 |只看该作者
本帖最后由 关阴月飞 于 2013-02-28 13:24 编辑

回复 1# 枫之歌

改了一下:
  1. #!/bin/bash
  2. export till_time=$(date -d "10 minutes ago" "+%F %T")
  3. export from_time=$(date -d "20 minutes ago" "+%F %T")

  4. awk -vtill="${till_time}" -vfrom="${from_time}" '$1FS$2 <= till && $1FS$2 >= from'  /tmp/$from_time.log  >$from_time.log
复制代码

论坛徽章:
0
9 [报告]
发表于 2013-02-28 15:00 |只看该作者
回复 8# 关阴月飞


理解不了你贴出来的方法。我也用awk写了一个。挂到crontab后测试可行。
  1. #!/bin/bash

  2. export till_time=$(date -d "10 minutes ago" +%T)
  3. export from_time=$(date -d "20 minutes ago" +%T)

  4. test -e /tmp/$(date +%F-%T).log | touch /tmp/$(date +%F-%T).log


  5. awk '$2 >= "'$from_time'" && $2 <= "'$till_time'" {print;}' < /var/log/localB.log > /tmp/$(date +%F-%T).log
复制代码
但仍然有个BUG。切割出来的两份log之间是丢失了5秒钟的记录。

mmc@90:/tmp$ tail -n2 2013-02-28-14\:30\:01.log
2013-02-28 14:19:53 90 sid_101_Gam2: [HARDWORK] MMM,LN=155, LM=159, T=841, BN=2, BM=89, MN=8, MM=439, PL=1
2013-02-28 14:19:57 90 sid_101_Core: [HARDWORK]

mmc@90:/tmp$ head 2013-02-28-14\:40\:01.log
2013-02-28 14:20:02 90 sid_101_Gam1: [HARDWORK] MMM,LN=200, LM=211, T=894, BN=2, BM=7587, MN=8, MM=27061, PL=1
2013-02-28 14:20:03 90 sid_101_Gam2: [HARDWORK]


crontab 怎么啦?难道我一定要写固定的时间,而不用date得出时间才准确吗?

论坛徽章:
6
摩羯座
日期:2013-08-24 10:43:10狮子座
日期:2013-08-25 10:27:06天秤座
日期:2013-09-11 20:28:44午马
日期:2014-09-28 16:06:0015-16赛季CBA联赛之八一
日期:2016-12-19 13:55:0515-16赛季CBA联赛之天津
日期:2016-12-20 14:01:23
10 [报告]
发表于 2013-02-28 17:28 |只看该作者
回复 9# 枫之歌

  
#!/bin/bash

    export till_time=$(date -d "10 minutes ago" +%T)
    export from_time=$(date -d "20 minutes ago" +%T)

    test -e /tmp/$(date +%F-%T).log | touch /tmp/$(date +%F-%T).log


    awk '$2 >= "'$from_time'" && $2 <= "'$till_time'" {print;}' < /var/log/localB.log > /tmp/$(date +%F-%T).log
   


我想问下能否保证如上三个颜色的 date 是一至的?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP