2016-11-30 37 views
0

因此,我正在处理一个脚本来删除一些旧的备份,当可用磁盘空间下降一定比例。获取更新的值Filesys :: DiskFree

# get disk info 
    $handle = Filesys::DiskFree->new(); 
    $handle->df(); 
    $available = $handle->avail("$dir"); 
    $used = $handle->used("$dir"); 
    $total = $handle->total("$dir"); 
    $used_p = ($used/$total) * 100.0; 
    print "$used_p\n"; 
    print "$used\n"; 

    # find files to delete 
    # --- special sauce code to find @files 

    # delete files 
    unlink @files; 

    # get new disk info 
    $handle = Filesys::DiskFree->new(); 
    $handle->df(); 
    $available = $handle->avail("$dir"); 
    $used = $handle->used("$dir"); 
    $used_p = ($used/$total) * 100.0; 
    print "$used_p\n"; 
    print "$used\n"; 

我的想法是,我用filesys在第二时间:: DiskFree我会得到它应反映删除的文件,新的DF值。但是,没有给我我期望的价值。并不完全一样,但差距并不如我预期的那么大。但是,第二次运行它时,我可以看到最初的打印反映了上一次运行中被删除的文件。就好像有某种延迟。如上所示,我尝试再次调用new()以查看是否会清除陈旧的数据。

+1

在应用程序终止之前,系统可能没有释放磁盘空间。就像生成大型日志文件的长时间运行的应用程序一样,删除文件会将其删除,但在重新加载应用程序之前,空间不会被释放。试试'lsof | grep deleted' ...你可能会看到你的文件仍然列出,如果是这样,并且在应用程序终止后它们不见了,这就是问题所在。 – stevieb

+0

这是我的问题。谢谢。 – Lex

+0

我已经回答了这个问题,以便未来的读者可以看到这个问题。 – stevieb

回答

1

在应用程序终止之前,系统可能没有释放磁盘空间。就像生成大型日志文件的长时间运行的应用程序一样,删除文件会将其删除,但在重新加载应用程序之前,空间不会被释放。尝试一个lsof | grep deleted ...你可能会看到你的文件仍然列出,如果是这样,它们在应用程序终止后就消失了,这就是问题所在。