请大家帮下忙,linux下怎样清空一个正在被写的文件,而不产生文件空洞?

情况是这样的:
用于生产的系统(不能重启)所产生的日志文件不再根据时间进行切换,所有的日志写入同一个文件,该日志文件不断增大。现在尝试用crontab定时备份并清空文件。但是日志文件虽然内容被清空,但是文件大小不变(文件空洞),用more命令查看,发现文件前面一片空白,只有到文件底部发现有新写入的数据。
自我分析: 这是由于写日志的进程保存了文件指针值(文件描述表项),虽然清空了文件但该文件指针值依然不变,所以产生文件空洞。
求助:用什么办法,可以备份当前日志内容,并减小日志文件大小,新内容又能被正确写入。

6回答

杨建旭杨建旭  技术经理 , 中国人民银行清算总中心
上善若水wjfyinxinUperbiao等赞同了此回答
1)应用的问题还得应用来解。 日志机制有问题,改机制,比如写满一个10M,自动切换到下一个2)把写日志的目录换一下,让应用把日志写到别的地方,然后你就可以备份原来的日志了。 显示全部

1)应用的问题还得应用来解。
日志机制有问题,改机制,比如写满一个10M,自动切换到下一个
2)把写日志的目录换一下,让应用把日志写到别的地方,然后你就可以备份原来的日志了。

收起
 2017-11-10
浏览3824
  • 感谢您给的建议,问下您这边之前遇到过类似问题吗,您给的第一条建议我们这边是无法做到了,对于第二点您是建议我改一个日志目录试试吗?
    2017-11-10
  • 没遇到过这样的问题,因为这种应用的问题一般早就被改了
    2017-11-12
匿名用户匿名用户
HelloWorDomainjerryshgning322赞同了此回答
1、因为生产系统不能重启,请使用 echo > log_file_name【这个会把你所有的日志内容清掉,空间会释放掉,如果日志重要建议备份在执行,后期就写一个自动的脚本 cp一份然后echo清除】 2、等下次应用系统停机或者其他维护需要停应用的时候,让应用改一下应用的日志机制,如:日志大小切...显示全部

1、因为生产系统不能重启,请使用 echo > log_file_name【这个会把你所有的日志内容清掉,空间会释放掉,如果日志重要建议备份在执行,后期就写一个自动的脚本 cp一份然后echo清除】

2、等下次应用系统停机或者其他维护需要停应用的时候,让应用改一下应用的日志机制,如:日志大小切换、日期切换机制等

收起
 2017-11-13
浏览3574
  • 感谢。我们是三台服务器共有7个任务,其中之一做为管理节点,其它为服务节点,我从控制台日志处理部分找到路径或去对应位置找日志文件了,没有找到。我这边服务都是直接用脚本nohup启动的,日志都存在了这个里面,所以你第二种方法我不清楚是否适合我这种情况,如果说原来在那个路径下就有日子的话还好一些,您遇到过没?? 按照你第一个方法我试验过,清空后在没有新的日志写入时没问题,文件大小0KB,但是有写的日志写入后文件大小就变成清空前大小+新写入的和了。文件中前半部分全部都是空格。
    2017-11-15
  • 用nohup方式启动的话,这是我们的操作方式: [root@zzc2 tep]# du -sh nohup.out 17M nohup.out [root@zzc2 tep]# cat /dev/null > nohup.out [root@zzc2 tep]# du -sh nohup.out 0 nohup.out 过了一会儿后: [root@zzc2 tep]# du -sh nohup.out 8.0K nohup.out
    2017-11-16
  • 赞同这种做法,这是目前很多企业的做法。
    2019-02-24
紫气东来007紫气东来007  研发工程师 , 信息安全公司
aixchina赞同了此回答
如果要将以前的内容清除掉,可以"> 文件名"。也可以设定文件大小限制,到了 显示全部

如果要将以前的内容清除掉,可以"> 文件名"。也可以设定文件大小限制,到了

收起
 2018-03-09
浏览2843
crystalwmagiccrystalwmagic  系统工程师 , 浙商银行
在Linux,通过rm或者文件管理器删除文件将会从文件系统的文件夹结构上解除链接(unlink).然而假设文件是被打开的(有一个进程正在使用),那么进程将仍然能够读取该文件,磁盘空间也一直被占用 通过lsof |grep deleted查看相应进程1、kill掉相应的进程2、停掉使用这个文件的应用(...显示全部

在Linux,通过rm或者文件管理器删除文件将会从文件系统的文件夹结构上解除链接(unlink).然而假设文件是被打开的(有一个进程正在使用),那么进程将仍然能够读取该文件,磁盘空间也一直被占用

通过lsof |grep deleted查看相应进程
1、kill掉相应的进程
2、停掉使用这个文件的应用(推荐)

收起
 2017-11-13
浏览3800
zhutuzhutu  存储工程师 , 龙存科技(北京)股份有限公司
直接把现在的日志文件重名名掉。然后新写入的日志重新生成和之前名字一样日志文件。可以先试验下,不知道可行不? 显示全部

直接把现在的日志文件重名名掉。然后新写入的日志重新生成和之前名字一样日志文件。
可以先试验下,不知道可行不?

收起
 2017-11-13
浏览3572
  • 先感谢你的回答:但是我理解的是如果我改了名字重新建立一个相同名字的文件,貌似日志就写不进去了吧?
    2017-11-15
  • 好几天没看。后面解决了吗?
    2017-11-23
  • 这种做法是不可行的,因为前后两个文件的文件句柄不一致
    2019-02-24
yaoyao2019yaoyao2019  测试工程师 , 南京大安电子商务
我在docker容器中查看tomcat的日志会遇到这种问题,现在目前的解决办法只有重启容器。 显示全部

我在docker容器中查看tomcat的日志会遇到这种问题,现在目前的解决办法只有重启容器。

收起
 2019-01-15
浏览981

提问者

我是爱罗其它, 保险公司
相关推广
  • P5/P6/P7升级到P9的技术分析手册
    目前在Power服务器的装机企业中,还有很多企业仍然在使用前几代的产品,比如:P5/P6/P7服务器等。这些服务器中,有的已经停产多年、已经没有服务支持,有的虽然目前没有停产、但也已经很快要停产了。所以本文档针对这些装机客户,从技术角度分析了:是继续使用老机器?还是迁移到新的机器上去?如何迁移?迁移过程中会有哪些可能遇到的问题?该如何应对等典型问题。
  • 众多金融信息化专家首选的“多云”究竟是什么?如何布局企业云化路线?
    本文从多云的发展趋势、多云给用户带来的收益、带来的挑战以及如何应对等几个方面阐述了自己的观点,并分享部分金融行业先行者的实践案例,希望能够为准备考虑进行多云化探索和实践的读者带来有益的参考和借鉴。
  • 问题状态

  • 发布时间:2017-11-10
  • 关注会员:9 人
  • 问题浏览:6602
  • 最近回答:2019-01-15
  • 关于TWT  使用指南  社区专家合作  厂商入驻社区  企业招聘  投诉建议  版权与免责声明  联系我们
    © 2019  talkwithtrend — talk with trend,talk with technologist 京ICP备09031017号-30