Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2079476
  • 博文数量: 470
  • 博客积分: 10206
  • 博客等级: 上将
  • 技术积分: 5620
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-03 12:50
文章分类

全部博文(470)

文章存档

2012年(1)

2011年(18)

2010年(47)

2009年(404)

分类:

2009-06-08 09:19:36

[] [] [] [] []
  帅哥
风云使者




CU编号: 690903
注册:2008-4-13
最后登录: 2009-06-08
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]       顶部
发表于 2009-6-5 09:49 
3. 日志切分在运维中扮演着重要角色,日志切换工具通常从一个管道文件读取日志内容,并以小时、或天、或星期等单位将日志内容保存到不同的文件中。请使用任意脚本实现一个简单的日志切分工具。
该工具的调用参数为:日志文件的路径    保存路径前缀   时间格式后缀

     举例说明:

./cronolog.sh  /var/log/something.log  /tmp/saved_log/my.log  %Y%m%d(为时间命令date支持的参数,%Y为年,%m为月,%d为日)



执行后,该脚本会一直运行并不断读取/var/log/something.log中的内容 ,把每一天的日志信息分别保存到如下日志中:

……

/tmp/saved_log/my.log.20090501
/tmp /saved_log/my.log.20090502

/tmp /saved_log/my.log.20090503

……


我的答案是:
#/bin/bash
awk '{a[$1" "$2]=$0}{for (i in a) print  a[i] >>"/var/log/my.log."i}' /var/log/messages

这样做对吗?

[[i] 本帖最后由 greendays 于 2009-6-5 09:53 编辑 [/i]]



您对本贴的看法:
| | |
  帅哥 (Tim)
法师


CU奥运火炬传递手2008
CU编号: 465018
注册:2006-9-13
最后登录: 2009-06-08
帖子:
精华:0







来自:长春
状态:...在线...

[] [] [博客]


[]     顶部
发表于 2009-6-5 10:08 
回复 #1 greendays 的帖子

你没理解题意,应该大致是这个意思:
#! /bin/bash

tail -f $1 | cat > $2.$(date +$3) &



您对本贴的看法:

__________________________________

记住该记住的,忘记该忘记的。改变能改变的,接受不能改变的。
| | |
  帅哥
风云使者




CU编号: 690903
注册:2008-4-13
最后登录: 2009-06-08
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]       顶部
发表于 2009-6-5 10:18 
回复 #2 ly5066113 的帖子

我的答案只是举一个例子。实际情况要修改程序。
您的答案高深,没看懂。可以解释一下吗?谢谢!



您对本贴的看法:
| | |
  帅哥 (黑哥)
精灵使



CU编号: 631768
注册:2007-10-22
最后登录: 2009-06-08
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]     顶部
发表于 2009-6-5 10:35 
回复 #2 ly5066113 的帖子

应该是这个意思。



您对本贴的看法:

__________________________________

LIVE FREE OR DIE!     K.I.S.S.


| | |
  帅哥 (Tim)
法师


CU奥运火炬传递手2008
CU编号: 465018
注册:2006-9-13
最后登录: 2009-06-08
帖子:
精华:0







来自:长春
状态:...在线...

[] [] [博客]


[]     顶部
发表于 2009-6-5 10:39 
回复 #3 greendays 的帖子

就是要不断的从 /var/log/something.log  中读数据
然后写到 /tmp/saved_log/my.log.$(date +%Y%m%d) 中

我的代码只是一个意思,实际情况要更复杂的多。



您对本贴的看法:

__________________________________

记住该记住的,忘记该忘记的。改变能改变的,接受不能改变的。
| | |
  帅哥
风云使者




CU编号: 690903
注册:2008-4-13
最后登录: 2009-06-08
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]       顶部
发表于 2009-6-5 10:55 
回复 #5 ly5066113 的帖子

您的这个是按照实际机器的日期。出题者的意思应该是按照日志里的日期来切分日志吧?

[ 本帖最后由 greendays 于 2009-6-5 11:38 编辑 ]



您对本贴的看法:
| | |
  帅哥
风云使者




CU编号: 690903
注册:2008-4-13
最后登录: 2009-06-08
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]       顶部
发表于 2009-6-5 11:00 
回复 #4 blackold 的帖子

按照我给的例子,日志的前两个字段是日期,那这样对不?
#/bin/bash
awk '{a[$1" "$2]=$0}{for (i in a) print  a[i] >>"/tmp/saved_log/my.log."i}' /var/log/something.log

[root@localhost lianshou]#cat /var/log/something.log
Jun  4 18:01:32 localhost syslogd 1.4.1: restart.
Jun  4 18:01:32 localhost kernel: klogd 1.4.1, log source = /proc/kmsg started.
Jun  4 18:01:32 localhost kernel: Linux version 2.6.18-92.el5xen ([email]mockbuild@builder16.centos.org[/email]) (gcc version 4.1.2 20071124 (Red Hat 4.1.2-42)) #1 SMP Tue Jun 10 19:55:54 EDT 2008
Jun  4 18:01:32 localhost kernel: BIOS-provided physical RAM map:
Jun  4 18:01:32 localhost kernel:  Xen: 0000000000000000 - 0000000076f55000 (usable)
Jun  4 18:01:32 localhost kernel: 1175MB HIGHMEM available.
Jun  4 18:01:32 localhost kernel: 727MB LOWMEM available.
Jun  5 18:01:32 localhost kernel: NX (Execute Disable) protection: active
Jun  5 18:01:32 localhost kernel: found SMP MP-table at 000ff780
Jun  6 18:01:32 localhost kernel: DMI present.

[[i] 本帖最后由 greendays 于 2009-6-5 11:02 编辑 [/i]]



您对本贴的看法:
| | |
  帅哥 (黑哥)
精灵使



CU编号: 631768
注册:2007-10-22
最后登录: 2009-06-08
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]     顶部
发表于 2009-6-5 11:01 
回复 #6 greendays 的帖子

如果是这样也不用“不停地运行“啊。

应该是将今天的生成的日志,保存到”file.log.今天的日期“这样的文件里吧。



您对本贴的看法:

__________________________________

LIVE FREE OR DIE!     K.I.S.S.


| | |
  帅哥 (黑哥)
精灵使



CU编号: 631768
注册:2007-10-22
最后登录: 2009-06-08
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]     顶部
发表于 2009-6-5 11:03 
回复 #7 greendays 的帖子

题目给出日志样本,还是你自己的样本?



您对本贴的看法:

__________________________________

LIVE FREE OR DIE!     K.I.S.S.


| | |
  帅哥
风云使者




CU编号: 690903
注册:2008-4-13
最后登录: 2009-06-08
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]       顶部
发表于 2009-6-5 11:09 
回复 #8 blackold 的帖子

明白了  ,大哥。谢谢指教!



您对本贴的看法:
| | |

» » »
[] [] [] [] []
  帅哥
风云使者




CU编号: 690903
注册:2008-4-13
最后登录: 2009-06-08
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]       顶部
发表于 2009-6-5 11:09 
回复 #9 blackold 的帖子

我自己的样本。题目没有给。



您对本贴的看法:
| | |
  帅哥
风云使者




CU编号: 690903
注册:2008-4-13
最后登录: 2009-06-08
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]       顶部
发表于 2009-6-5 11:11 
回复 #8 blackold 的帖子

应该是将今天的生成的日志,保存到”file.log.今天的日期“这样的文件里吧。
就是这个意思,您和Tim 理解的。



您对本贴的看法:
| | |
  帅哥 (黑哥)
精灵使



CU编号: 631768
注册:2007-10-22
最后登录: 2009-06-08
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]     顶部
发表于 2009-6-5 11:12 
回复 #11 greendays 的帖子

如果是这样,不需要“不停地运行"啊。



您对本贴的看法:

__________________________________

LIVE FREE OR DIE!     K.I.S.S.


| | |
  帅哥
风云使者




CU编号: 690903
注册:2008-4-13
最后登录: 2009-06-08
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]       顶部
发表于 2009-6-5 11:13 
回复 #13 blackold 的帖子

我想要是实际做的话,写个脚本放在,crond里。



您对本贴的看法:
| | |
  帅哥 (黑哥)
精灵使



CU编号: 631768
注册:2007-10-22
最后登录: 2009-06-08
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]     顶部
发表于 2009-6-5 11:15 
回复 #14 greendays 的帖子

那是你的意思,题目没有这样说吧。



您对本贴的看法:

__________________________________

LIVE FREE OR DIE!     K.I.S.S.


| | |
  帅哥
风云使者




CU编号: 690903
注册:2008-4-13
最后登录: 2009-06-08
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]       顶部
发表于 2009-6-5 11:18 
回复 #15 blackold 的帖子

是哩,看来这道题目也挂了!哎、、  大哥,您写一下答案吧?Tim 的太难,看不懂。



您对本贴的看法:
| | |
  帅哥 (黑哥)
精灵使



CU编号: 631768
注册:2007-10-22
最后登录: 2009-06-08
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]     顶部
发表于 2009-6-5 11:24 
回复 #16 greendays 的帖子

就是把新生成的log行添加到指定的文件里啊。tail -f file命令。



您对本贴的看法:

__________________________________

LIVE FREE OR DIE!     K.I.S.S.


| | |
  帅哥
风云使者




CU编号: 690903
注册:2008-4-13
最后登录: 2009-06-08
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]       顶部
发表于 2009-6-5 11:32 
回复 #17 blackold 的帖子

理解了!! 呵呵 。



您对本贴的看法:
| | |
  帅哥
大天使




CU编号: 804020
注册:2009-1-17
最后登录: 2009-06-08
帖子:
精华:0







状态:...离线...

[] [] [博客]


[]     顶部
发表于 2009-6-5 12:14 
回复 #1 greendays 的帖子

我的理解和你一样。。。看来bug了



您对本贴的看法:

__________________________________



喜欢犯错误,渴望被批判。
| | |
  帅哥
侠客




CU编号: 6870
注册:2002-4-12
最后登录: 2009-06-06
帖子:
精华:0







来自:SZ.gD.Cn
状态:...离线...

[] [] [博客]


[]     顶部
发表于 2009-6-6 00:46 


QUOTE:
原帖由 greendays 于 2009-6-5 09:49 发表
3. 日志切分在运维中扮演着重要角色,日志切换工具通常从一个管道文件读取日志内容,并以小时、或天、或星期等单位将日志内容保存到不同的文件中。请使用任意脚本实现一个简单的日志切分工具。
该工具的调用参 ...

一个完善的脚本,不是用1行命令就容易解决的。
不断运行,用tail -f或者while :循环即可,不过比较变态,
既然是备份,每天运行1次不就得了。

太晚了,要休息了,
在ue里写的,没测试过,可能有错误。不好意思了。

运行方式:
1) test /log /tmp %Y%m
2) test /log /tmp %Y%m%d

因不好确定文件名,就随便用了下find命令查找最近1天内修改的*.log文件当作源文件。

QUOTE:
#!/bin/sh

usage="$0 "

if [ $# -ne 3 ]; then
  echo "$usage"
  exit -1
fi

logPath=$1
savePath=$2
format=$3

if [ ${logPath:0:1} != "/" -a ${savePath:0:1} != "/" ]
then
  echo "--path must begin with /."
  exit -1
fi

if [ ! -d "$logPath" ]; then
  echo "--path $logPath is not exists."
  exit -1
fi

if [ ! -d "$savePath" ]; then
  mkdir -p $savePath
fi

tmpFormat=${format//%/ %}

for tmp in $tmpFormat;do
  if [ $(man date|grep "^ *$tmp"|wc -l) -lt 1 ]; then
    echo "--not support date format $tmp"
    exit -1
  fi
done

find $logPath -mtime -1 -type f  -name "*.log"|while read file
do
   logFile=${file##*/}
   tail -f $logPath/$logFile |cat >>$savePath/$logFile.$(date +$format) &
done 2>/dev/null

[ 本帖最后由 dandy 于 2009-6-6 00:53 编辑 ]



您对本贴的看法:
| | |

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