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

情况是这样的:

       用于生产的系统(不能重启)所产生的日志文件不再根据时间进行切换,所有的日志写入同一个文件,该日志文件不断增大。现在尝试用crontab定时备份并清空文件。但是日志文件虽然内容被清空,但是文件大小不变(文件空洞),用more命令查看,发现文件前面一片空白,只有到文件底部发现有新写入的数据。

自我分析: 这是由于写日志的进程保存了文件指针值(文件描述表项),虽然清空了文件但该文件指针值依然不变,所以产生文件空洞。
求助:用什么办法,可以备份当前日志内容,并减小日志文件大小,新内容又能被正确写入。

参与55

6同行回答

yangjianxvyangjianxv  部门总经理 , 成方金融科技有限公司
1)应用的问题还得应用来解。 日志机制有问题,改机制,比如写满一个10M,自动切换到下一个2)把写日志的目录换一下,让应用把日志写到别的地方,然后你就可以备份原来的日志了。显示全部

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

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

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

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

收起
软件开发 · 2017-11-13
浏览15287
  • 感谢。我们是三台服务器共有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
crystalwmagiccrystalwmagic  系统工程师 , 浙商银行
在Linux,通过rm或者文件管理器删除文件将会从文件系统的文件夹结构上解除链接(unlink).然而假设文件是被打开的(有一个进程正在使用),那么进程将仍然能够读取该文件,磁盘空间也一直被占用通过lsof |grep deleted查看相应进程1、kill掉相应的进程2、停掉使用这个文件的应用(推...显示全部

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

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

收起
银行 · 2017-11-13
浏览15377
紫气东来007紫气东来007  研发工程师 , 某研究院
如果要将以前的内容清除掉,可以"> 文件名"。也可以设定文件大小限制,到了显示全部

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

收起
科研院所 · 2018-03-09
浏览14109
yaoyao2019yaoyao2019  测试工程师 , 南京大安电子商务
我在docker容器中查看tomcat的日志会遇到这种问题,现在目前的解决办法只有重启容器。显示全部

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

收起
互联网服务 · 2019-01-15
浏览12279
zhutuzhutu  存储工程师 , 中国电子科技集团第五十二研究所
直接把现在的日志文件重名名掉。然后新写入的日志重新生成和之前名字一样日志文件。可以先试验下,不知道可行不?显示全部

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

收起
IT咨询服务 · 2017-11-13
浏览15076
  • 先感谢你的回答:但是我理解的是如果我改了名字重新建立一个相同名字的文件,貌似日志就写不进去了吧?
    2017-11-15
  • 好几天没看。后面解决了吗?
    2017-11-23
  • 这种做法是不可行的,因为前后两个文件的文件句柄不一致
    2019-02-24

提问者

我是爱罗
其它保险公司
擅长领域: 双活Linux应用服务器

问题来自

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2017-11-10
  • 关注会员:9 人
  • 问题浏览:21448
  • 最近回答:2019-01-15
  • X社区推广