清除日志文件不产生文件空洞

2020/2/10 14:56:28

本文主要是介绍清除日志文件不产生文件空洞,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

文件空洞:文件内容的大小小于文件磁盘占用的空间

产生原因:如java使用
nohup java -jar xxx.jar > log.txt
方式启动java程序,但随着日志内容的增多,服务器磁盘空间不足,需要清理日志文件,所以可采用命令
echo '' > log.txt
此时日志文件内容被清空(注意,如果只是通过重命名或删除或vim编辑日志文件的方式清除文件内容时,由于程序没有停止,这样会导致输出的日志文件的fd还是指向原来文件,那么新添加的日志内容将没法写到日志文件中去),通过命令
ll log.txt
发现文件磁盘占用空间变小了,由原来的几G变到几b,然后过几秒后有新的日志内容输入时,文件磁盘空间突然变到原来的几G,这就是所谓的文件空洞的具体表现。打开日志文件发现内容清空,但实际上写入的位置没有重置到文件起始位置,为覆盖写;因此重新写放时都以null值占用,解决方法就是日志输出改成追加写
nohup java -jar xxx.jar >> log.txt
这样在清空文件时,写入位置置零,追加写入会从起始位置开始写入,不会产生文件空洞,当然清空日志文件内容时,如果日志文件重要,谨记先备份再清空。

清空日志文件不产生文件空洞的正确做法就是

  1. 启动程序时指定内容输出到日志文件中是以追加方式输出nohup java -jar xxx.jar > log.txt,当然不指定日志文件名,nohup默认就是追加到nohup.out中去
  2. 使用echo '' > log.txt命令把日志文件清空


这篇关于清除日志文件不产生文件空洞的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程