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

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

产生原因:如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命令把日志文件清空
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容