应用日志文件被删,空间无法释放?

用日志文件在应用未关的时候被直接删除,空间不释放还会不停增涨,怎样在不重启应用的情况下释放空间?

我的做法是,把下面的封装一个shell脚本,这个脚本就是清空你的文件的,比如长时间执行的程序的log文件
做好这个shell脚本,加入定时里,一周清理一次或者2周,自定义

cat /dev/null > file_name

上面的做完还需要你配置一下你程序的start.sh,这个文件里面如果你使用了 比如类似下面的

$JAVA_HOME/bin/java $JAVA_OPTS -classpath $CONF_DIR:$CLASSPATH:. $MAIN_CLASS > ./console.log 2>&1 &

注意要将 【> ./console.log 】改成 【>> ./console.log】,不然会发生虽然清空了文件内容,但是文件显示的大小没有变化,
最后修改的start.sh类似下面的,也就是:

$JAVA_HOME/bin/java $JAVA_OPTS -classpath $CONF_DIR:$CLASSPATH:. $MAIN_CLASS >> ./console.log 2>&1 &

在应用未关的情况下,如果日志文件被直接删除,空间不会被释放并会不断增长。这可能是因为文件被打开,但是句柄没有被释放,所以空间不能被回收。以下是一些解决方案:

检查应用程序,确保所有文件句柄都被正确地关闭。

如果应用程序无法关闭文件句柄,则可以使用第三方工具如lsof来查找应用程序打开的所有文件句柄。使用lsof工具可以帮助你找到应用程序未关闭的文件句柄,然后手动关闭这些句柄以释放空间。

如果应用程序是运行在Linux系统上,你可以使用echo命令将空白字符写入特定的文件,以释放文件占用的空间。例如,可以使用以下命令将空白字符写入日志文件:

echo "" > /path/to/logfile


如果你不能关闭文件句柄,也不能使用echo命令释放空间,可以考虑使用logrotate等工具来管理日志文件。logrotate是一种广泛使用的Linux工具,可用于自动轮转和归档日志文件,以防止日志文件变得过大并占用过多磁盘空间。答案参考来自 https://www.wodianping.com/