Chinaunix

标题: 询问一个日志保存的问题 [打印本页]

作者: wunesta    时间: 2012-06-12 15:18
标题: 询问一个日志保存的问题
现有一程序写一个日志文件/opt/ctos.log

日志大小大于50M的时候就切换日志,并以时间命名

我采取的办法是

PATH=$PATHHOME/bin:/sbin:/usr/sbin:/usr/bin:/root/bin

export PATH

DATE=`date +_%Y_%m_%d_%H_%M_%S`

size=$( ll /opt/ctos.log|awk '{print $5}' )

if [$size -gt 50000000] ; then

cp /opt/ctos.log /opt/ctos$DATE.log

cat /dev/null > /opt/ctos.log

fi

这样在cp执行后和cat执行前这时间内的日志会丢失 ,请问各位大侠采用什么办法才能不丢日志?

我的系统是hp-ux, 不支持sed -i选项,苦恼啊~~
作者: damcool    时间: 2012-06-12 15:22
用mv -f 取代cp
作者: damcool    时间: 2012-06-12 15:26
本帖最后由 damcool 于 2012-06-12 15:28 编辑

  1. DATE=`date +_%Y_%m_%d_%H_%M_%S`
  2. size=$( stat -c %s /opt/ctos.log)
  3. if [ $size -gt 50000000 ] ; then
  4.      mv -f /opt/ctos.log /opt/ctos${DATE}.log
  5.      touch /opt/ctos.log
  6. fi
复制代码

作者: wunesta    时间: 2012-06-12 15:27
mv之后没用的  日志写入会写到mv之后的那个文件

我是用>> 写到ctos.log的
如果mv ctos.log ctos.log.20120606之后就去写ctos.log.20120606了  -f只是禁止交互操作
作者: damcool    时间: 2012-06-12 15:29
wunesta 发表于 2012-06-12 15:27
mv之后没用的  日志写入会写到mv之后的那个文件

我是用>> 写到ctos.log的

你的说法很有趣,你可尝试过??!!
作者: wunesta    时间: 2012-06-12 15:38
我当然试过了。。 这办法没用才苦恼啊
作者: damcool    时间: 2012-06-12 15:41
wunesta 发表于 2012-06-12 15:38
我当然试过了。。 这办法没用才苦恼啊

那我告诉你你问错问题了,你的问题是文件读写锁的问题。
作者: wunesta    时间: 2012-06-12 15:43
rx2800b/opt~mv -f ctos.log ctos1212.log
rx2800b/opt~ll|grep ctos               
drwxr-xr-x   5 root       sys           8192 6月11日 09:23 ctos
-rw-r--r--   1 root       sys        5668613 6月12日 15:41 ctos1212.log
-rw-r--r--   1 root       sys         684369 6月 8日 14:15 ctoscut.log
rx2800b/opt~mv -f ctos.log ctos1212.log
mv: ctos.log: 不能存取: 没有该文件或目录
rx2800b/opt~ll|grep ctos               
drwxr-xr-x   5 root       sys           8192 6月11日 09:23 ctos
-rw-r--r--   1 root       sys        5668613 6月12日 15:41 ctos1212.log
-rw-r--r--   1 root       sys         684369 6月 8日 14:15 ctoscut.log
rx2800b/opt~ll|grep ctos               
drwxr-xr-x   5 root       sys           8192 6月11日 09:23 ctos
-rw-r--r--   1 root       sys        5668613 6月12日 15:41 ctos1212.log
-rw-r--r--   1 root       sys         684369 6月 8日 14:15 ctoscut.log
rx2800b/opt~ll|grep ctos
drwxr-xr-x   5 root       sys           8192 6月11日 09:23 ctos
-rw-r--r--   1 root       sys        5675705 6月12日 15:42 ctos1212.log
-rw-r--r--   1 root       sys         684369 6月 8日 14:15 ctoscut.log
rx2800b/opt~
作者: wunesta    时间: 2012-06-12 15:44
我mv之后  ctos1212.log在变大 还是在写这个文件哦

高手有什么高招不?:wink:
作者: wunesta    时间: 2012-06-12 15:46
就是日志切换保存,websphere里日志就是每50M切换一个,不会有丢失。现在不想在websphere上跑程序,自己搞这个日志切换才有问题哦


-rw-r--r--   1 root       root       28956647 6月12日 15:46 SystemOut.log
-rw-r--r--   1 root       root       52429012 6月11日 17:32 SystemOut_12.06.11_17.32.14.log
-rw-r--r--   1 root       root       52430435 6月12日 00:28 SystemOut_12.06.12_00.28.35.log
-rw-r--r--   1 root       root       52430437 6月12日 07:37 SystemOut_12.06.12_07.37.41.log
-rw-r--r--   1 root       root       52430403 6月12日 12:41 SystemOut_12.06.12_12.41.48.log

其实要的就是这种效果
作者: damcool    时间: 2012-06-12 15:47
这个情况时因为你输出的文件句柄没有释放,这是文件读写锁的问题。你输出log文件的脚本贴出来看看。
作者: damcool    时间: 2012-06-12 15:49
参阅syslogn或syslog内关于log文件大小的设定
作者: wunesta    时间: 2012-06-12 15:50
就当我死循环在写这个日志文件 每次都 cat 1>>ctos.log
作者: wunesta    时间: 2012-06-12 15:55
高手详细指点下行不,百度的不太明白
作者: damcool    时间: 2012-06-12 16:09
wunesta 发表于 2012-06-12 15:55
高手详细指点下行不,百度的不太明白


朋友你的努力方向错了,你需要知道如何配置WEBSPHERE的log文件。

http://publib.boulder.ibm.com/in ... _log_was_config.htm
作者: 油条回锅肉    时间: 2012-06-12 16:41
先把日志写入一个文件,如果满50M了就把日志写入另一个文件,再mv之前的那个,这样行不
作者: greysky-zfj    时间: 2012-06-12 16:59
回复 16# 油条回锅肉


    这样铁定不行
作者: bluejack    时间: 2012-06-12 17:19
我在切割一个日志的时候也会有你这个问题

但是我采取的办法是,把我的那个服务重新加载配置一次   这样mv之后 就不会继续往老的文件里写了 而是生产一个新的文件

不知道你的是什么服务  可以重新加载配置而不重启么
作者: wunesta    时间: 2012-06-12 18:27
回复 18# bluejack


    不行哦  系统不能中断。。。 24小时作业的
作者: wunesta    时间: 2012-06-12 18:27
damcool 发表于 2012-06-12 16:09
朋友你的努力方向错了,你需要知道如何配置WEBSPHERE的log文件。

http://publib.boulder.ibm.com/in ...



我就是要抛开websphere哦~~~
作者: damcool    时间: 2012-06-12 19:22
wunesta 发表于 2012-06-12 18:27
我就是要抛开websphere哦~~~


很抱歉的告诉你这样的话肯定无解!
作者: wolf5729    时间: 2012-06-12 21:11
logrotate看能否适用。
理论上是可以的,很多操作系统服务就是用它来轮换日志文件的。

------------------------------------
欢迎光临我的博客:www.danoking.com [DNK的博客]
作者: Honey-pot    时间: 2012-06-12 22:09
提示: 作者被禁止或删除 内容自动屏蔽
作者: wunesta    时间: 2012-06-13 07:51
我这系统man logrotate 无这个命令。。。
作者: wunesta    时间: 2012-06-13 08:03
搞不定搞不定 看似简单其实很深很深。。。。
作者: wunesta    时间: 2012-06-13 08:03
看似简单  太深太深。。。。。

   
作者: bluejack    时间: 2012-06-13 09:30
回复 19# wunesta


    不是叫你重启,重新加载一次配置而已  不是重启服务啊
作者: damcool    时间: 2012-06-13 09:44
简单问题,自己把它搞复杂了。只要适当配置websphere的log设定就好了。搞什么脚本飞机!弄不懂!




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2