正在运行的应用,使用 cat /dev/null > logfile 后文件空间不释放

254 天前
 284716337

请教各位大佬,我有个 java 的应用,用的是nohup java -jar > logfile.log & 这样启动的,有时候日志文件比较大我想清理下,但是又不想停止应用,使用以下的几个方法

方法 1
cat /dev/null > logfile
方法 2
: > logfile
方法 3
cat "" > logfile

执行后发现日志文件里面的内容为空了,但是日志文件的大小没有任何变化。

大佬能告诉我是哪里出问题了么?有啥解决办法呢? 谢谢各位大佬!

1155 次点击
所在节点    Linux
11 条回复
guyeu
254 天前
```shell
truncate -s 0 /path/to/logfile
```

:(
依然搞不明白 V2 评论区咋发源码。
284716337
254 天前
@guyeu 不行,试过了,
guyeu
254 天前
@284716337 操作系统,文件系统是什么?
284716337
254 天前
@guyeu centos 7.6 ext4 的磁盘格式
yanqiyu
254 天前
是不是程序已经释放+重新打开了,要不去对应的 /proc/pid/fd/N 来 truncate 以下
chingyat
254 天前
truncate 应该是有效的,这不过程序已经打开的文件描述符不会自动 seek 到文件开头,当程序再次输出的时候,文件的大小还是会增加。这时候文件前面的部分应该是空洞。可以通过 ls -lsh logfile 比较。
tomychen
252 天前
touch newfile ;cp newfile /path/to/logfile
cnleon
252 天前
你是怎么确认文件大小没有变化的? ls ? du ?
284716337
251 天前
@cnleon ls -lh 和 du 看大小没有变,还有 df -h 看磁盘释放没有
cnleon
251 天前
@284716337 你 lsof 看看吧
keay250
245 天前
我一般是这么清空日志文件的
`echo > logfile`

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1032725

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX