0

そのため、使用可能なディスク容量が特定の割合を下回ったときに古いバックアップを削除するスクリプトを作成しています。

    # 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 を 2 回目に使用すると、削除されたファイルを反映する新しい df 値が得られるはずです。しかし、私が期待する値を私に与えていません。まったく同じではありませんが、違いは私が期待するほどではありません。ただし、2回目に実行すると、最初の印刷に前回の実行で削除されたファイルが反映されていることがわかります。なんらかの遅延が発生したかのようです。上記のように、古いデータが消去されるかどうかを確認するために、もう一度 new() を呼び出してみました。

4

1 に答える 1

1

アプリケーションが終了するまで、システムがディスク領域を解放していない可能性があります。大きなログ ファイルを生成する実行時間の長いアプリケーションと同様に、ファイルを削除すると削除されますが、アプリケーションがリロードされるまで領域は解放されません。試してみてくださいlsof | grep deleted... ファイルがまだ一覧に表示される場合があります。一覧に表示されていて、アプリの終了後にファイルが表示されない場合は、これが問題です。

于 2016-12-01T21:01:22.237 に答える