我有一个拥有资产目录的网站。有时我需要删除整个文件夹,以前在AWS上我有一个带有EBS的EC2用于存储,它运行正常。
我现在正在测试EFS以跨多个实例共享资产。这些文件被删除但是当它去除目录时会抛出一个警告,说该目录不是空的:
错误[警告]:rmdir(/ path /):目录不为空
在查看文件系统时,目录为空,因此我只能假设存在一些延迟。我已经设置了一个睡眠功能,看看是否将其修复为测试,但事实并非如此。
目录上的权限看起来正确,保存/删除文件没有问题。
执行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 :(得分:1)
这很可能意味着另一个进程在一个或多个文件上有一个锁。这可能是文件未正确关闭的软件错误。
这可能适用于EBS但不适用于NFS的原因是删除文件的处理方式存在差异。
有一些软件工具可以告诉您文件系统上打开了哪些文件。使用这些工具之一来弄清楚发生了什么。通常,您还可以看到具有打开文件的进程。
rm -rf很可能无法正常工作。 -f选项是“force”,这意味着更改只读文件的权限,以便可以删除它。 rm无法更改/删除文件系统锁定。