2017-11-08 19 views
0

私はassetsディレクトリを持つWebサイトを持っています。時にはフォルダー全体を削除する必要があり、以前はAWS上でEBSを使ってEC2を保管していましたが、うまくいきました。NFSアップグレード後にディレクトリが空でないためrmdirが失敗する

私は現在、EFSをテストして、複数のインスタンスにわたってアセットを共有しています。ファイルは、それがディレクトリを言って警告をスローするディレクトリを削除するために行くしかし時に削除されていることは空ではありません。

ERROR [警告]:rmdirを(/パス/):空でないディレクトリ

ファイルシステムを見ると、ディレクトリは空ですので、遅れがあると仮定できます。私はそれがテストとしてそれを修正するかどうかを確認するために睡眠機能を入れましたが、そうではありません。

ディレクトリのアクセス権が正しいように見え、ファイルの保存/削除に問題はありません。

rm -rfコマンドを実行する唯一の方法はありますか?以下の削除を行うコード:

public function delTree($dir) { 
    $files = array_diff(scandir($dir), array('.','..')); 
    foreach ($files as $file) { 
     (is_dir("$dir/$file")) ? $this->delTree($dir . $file . "/") : unlink("$dir/$file"); 
    } 
    return rmdir($dir); 
} 
+0

ドットファイル( 'ls -la')がないことを確認しましたか?あなたのEFSファイルシステムは "汎用"か "最大限のI/O"でしたか? –

+0

ええ、ドット、一般目的なし。 – Rudiger

答えて

1

は、ほとんどの場合、これは別のプロセスが1つのまたは複数のファイルに保持されたロックを有することを意味します。これは、ファイルが適切に閉じられないソフトウェアのバグです。

EBSでは動作したがNFSでは動作しなかった理由は、削除されたファイルの処理方法の違いです。

ファイルシステム上でどのファイルが開いているかを示すソフトウェアツールがあります。これらのツールのいずれかを使用して、何が起きているか把握します。通常は、開いているファイルがあるプロセスも表示されます。

rm -rfはほとんど機能しない可能性があります。 -fオプションは "force"です。これは、読み取り専用ファイルのアクセス権を変更して削除できることを意味します。 rmはファイルシステムのロックを変更/削除できません。

関連する問題