Rover12421's Blog

The End.

Linux下检测释放已删除空间

Linux下面删除文件,如果有进程占用该文件时,是不会立即释放空间的,需要等到被占用进程结束后才会回收。最近同事在tomcat上了个新项目,log异常之多,磁盘空间远远不够,所以需要及时清空log,为此我写了一个shell专门干这个。当然治本还的是优化程序,优化tomcat日志输出。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/bin/sh

################################################################
#使用死循环不停的检查删除列表中已删除的未释放文件,并释放空间
#检查列表文件为:
#        deleteFileList.txt
#请把改文件放在和本shell一个目录,没有请创建一个
#请把要检查的文件写到改目录里
#实际使用的是grep进行字符串匹配,所以是模糊匹配
#                By:Rover12421
#                Http://www.rover12421.com/
#
#                              2012/09/07
################################################################

#本shell一共使用了3个嵌套循环
#第一个while进行死循环检查,如果把本shell加到定时器,请删除这个循环
while :
do

    # 第二个循环检查列表文件
    cat deleteFileList.txt | while read file; do

        # 第三个循环匹配删除文件列表,并释放空间
        lsof | grep delete | grep $file | awk '{print "/proc/"$2"/fd/"$4}' | awk -F u '{print $1}' | while read line; do
        echo $line
        echo > $line
        done
    done

# 死循环每执行一次休息60s,可以根据需要调整。如果使用定时器,请删除之
echo "sleep 60s"
sleep 60
done

Comments