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

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

情况是这样的:

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

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

收起
参与55

查看其它 5 个回答匿名用户的回答

匿名用户匿名用户

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

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

软件开发 · 2017-11-13
浏览15413
  • 感谢。我们是三台服务器共有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

回答状态

  • 发布时间:2017-11-13
  • 关注会员:9 人
  • 回答浏览:15413
  • X社区推广