У меня есть веб-сайт с каталогом активов. Иногда мне нужно удалить целую папку, и ранее в AWS у меня был EC2 с EBS для хранения, и он работал нормально.
Сейчас я тестирую EFS, чтобы разделить ресурсы между несколькими экземплярами. Файлы удаляются, однако при удалении каталога выдается предупреждение о том, что каталог не пустой:
ОШИБКА [Предупреждение]: 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);
}
Скорее всего, это означает, что другой процесс заблокирован одним или несколькими файлами. Это может быть программная ошибка, при которой файлы не закрываются должным образом.
Причина того, что это могло работать с EBS, но не с NFS, заключается в различиях в обработке удаленных файлов.
Существуют программные средства, которые могут сказать вам, какие файлы открыты в файловых системах. Используйте один из этих инструментов, чтобы выяснить, что происходит. Обычно вы также можете увидеть процесс, который имеет открытый файл.
rm -rf скорее всего не будет работать. Параметр -f имеет значение «force», что означает изменение прав доступа к файлу только для чтения, чтобы его можно было удалить. rm не может изменить / снять блокировку файловой системы.
Других решений пока нет …