LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 994|回复: 8

请教一个shell脚本

[复制链接]
发表于 2006-9-11 09:25:06 | 显示全部楼层 |阅读模式
请教高手:Linux下怎么清空某一进程所产生的日志?
发表于 2006-9-11 12:19:01 | 显示全部楼层
  1. :>the.log
复制代码
回复 支持 反对

使用道具 举报

发表于 2006-9-11 15:19:45 | 显示全部楼层
某一进程所产生的日志?
回复 支持 反对

使用道具 举报

发表于 2006-9-11 16:01:06 | 显示全部楼层
将某一进程的输出信息放到/dev/null里
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-9-11 16:31:09 | 显示全部楼层
有一个shell 脚本 创建了out.log文件 "/apps/abc/run.sh > out.log &", 程序一直运行的, 不断写log到文件out.log, 当log写到10M的时候,把内容转移到另外一个文件中,清空log,下次从头开始写
回复 支持 反对

使用道具 举报

发表于 2006-9-11 17:10:31 | 显示全部楼层
写个脚本放在后台,每隔5妙检测一下log文件大小,未测试

  1. while true;do
  2. [[ $(stat -c %s out.log -eq 10485760 ]] && (tar cf out.tar out.log ; >out.log)
  3. sleep 5
  4. done
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-9-11 17:17:58 | 显示全部楼层
现在问题是清空之后的log文件里面都是“0”,产生日志的程序是个C++编写的程序,据说是那个程序写日志时有个文件指针在,即使文件清空了,程序写日志的指针没清回0,所以日志里都是0,10M后就不能写入log了,不知各位听明白没?焦头烂额呀^_^
回复 支持 反对

使用道具 举报

发表于 2006-9-11 20:11:29 | 显示全部楼层
Post by looren.1912
现在问题是清空之后的log文件里面都是“0”,产生日志的程序是个C++编写的程序,据说是那个程序写日志时有个文件指针在,即使文件清空了,程序写日志的指针没清回0,所以日志里都是0,10M后就不能写入log了,不知各位听明白没?焦头烂额呀^_^

这个没办法了,属于程序设计错误,这可没有办法让其他的进程rewind那个C++程序的文件指针,我建议你联系程序作者改进程序。一般LOG程序打开LOG时使用open函数理应使用O_APPEND标志,这样做可以使write调用每次写时会检查一次文件的大小,再自动更新一次文件指针,然后再写,这样可避免上面的情况。


另一个思路:不清空LOG, 使用head, tail,sed,dd 等工具,将每个10M的LOG移到新的地方?
回复 支持 反对

使用道具 举报

发表于 2006-9-12 11:45:42 | 显示全部楼层
可以用c再编一个函数专门处理log,不过还不如改原来的程序呢,其实最好的办法是,专门写一个log的处理模块,然后在自己的程序里调用,因为log很常用,所以在上边花些时间还是满值得的。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表