免费注册 查看新帖 |

Chinaunix

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

请大家帮下忙,linux下怎样清空一个正在被写的文件,而不产生文件空洞 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-01-21 16:21 |只看该作者 |倒序浏览
情况是这样的:
           由于代码bug,用于生产的系统(不能重启)所产生的日志文件不再根据时间进行切换,所有的日志写入同一个文件,该日志文
件不断增大。现在尝试用crontab定时备份并清空文件。但是日志文件虽然内容被清空,但是文件大小不变(文件空洞),用more命令查看,
发现文件前面一片空白,只有到文件底部发现有新写入的数据。
自我分析:
           这是由于写日志的进程保存了文件指针值(文件描述表项),虽然清空了文件但该文件指针值依然不变,所以产生文件空洞。
求助:
         用什么办法,可以备份当前日志内容,并减小日志文件大小,新内容又能被正确写入。

论坛徽章:
1
摩羯座
日期:2014-05-01 14:18:58
2 [报告]
发表于 2010-01-21 16:47 |只看该作者
没见过“文件空洞”

怎么清空文件的?

论坛徽章:
0
3 [报告]
发表于 2010-01-21 18:08 |只看该作者
怎么感觉这个帖面熟呢。。。。


改变文件inode试试看。。。。。。。。。。改变之后马上mv,同时生成一个文件给程序写入,看看行不行。。。。

不行的话再顶贴上来,再想想。。。。我觉得是可以解决的。。。。

论坛徽章:
0
4 [报告]
发表于 2010-01-21 21:31 |只看该作者
看你怎么清的了

空白可以sed  -i '/^$/d' 去掉就好

论坛徽章:
0
5 [报告]
发表于 2010-01-21 21:40 |只看该作者
$>yourfile
试试看~

论坛徽章:
0
6 [报告]
发表于 2010-01-21 22:55 |只看该作者
原帖由 q_T_p 于 2010-1-21 16:21 发表
情况是这样的:
           由于代码bug,用于生产的系统(不能重启)所产生的日志文件不再根据时间进行切换,所有的日志写入同一个文件,该日志文
件不断增大。现在尝试用crontab定时备份并清空文件。但是日 ...


1、文件空洞不占磁盘空间,纵然使用 “ls -lh 文件”看到很大,但是df 检测会发现实际空间没有增加。

楼主可以写C程序测试,创建一个文件,然后seek移动文件指针后再次写入数据。就会发现文件很大。

2、解决办法很简单,logrotate。楼主参考他是如何处理系统日志的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP