大家知道,清理日志文件时,如果该文件正在被某进程使用,则系统不会删除,只会标注为deleted(使用lsof|grep deleted可以查看哪些文件被标注为这个状态),所以这部分的磁盘空间不会释放,那么如何在不重启进程的情况下,让空间释放呢?使用重定向符清空文件即可.

假设日志文件为/var/log/tomcat/info.log,则使用命令:

 > /var/log/tomcat/info.log

当该目录下有多个文件时,可以结合find查找文件,但是使用下面的命令无效(引起Shell的歧义,会在当前目录生成一个文件名为{}的文件):

find /var/log/tomcat/ -type f -name '*.log' -exec > {} \;   #无效命令

那么可以复杂一点,写个脚本:

for file in `find /var/log/tomcat/ -type f -name '*.log'`;do
  > $file
done

其实最简单的方法是:

find /var/log/tomcat/ -type f -name '*.log' -exec sh -c '> {}' \;