Seit zwei tagen bekomme ich Message: Failed to remove directory. Dies nach Update von 5.6.7 auf 5.6.8, Jemand eine Idee, was das ist oder wie ich das löse?
"/var/www/vhosts/..../....[/var/cache/production\_202008121209/html/md](http://partylook.com/var/cache/production_202008121209/html/md)": rmdir(/var/www/vhosts/..../....[/var/cache/production\_202008121209/html/md](http://partylook.com/var/cache/production_202008121209/html/md)): Directory not empty
ich habe das Problem leider ebenfalls beim täglichen Refresh des http-Caches und mich mal mit meinem Hoster dazu unterhalten.
Die meinen folgendes:
So wie ich die Fehlermeldung deute ist das Verhalten technisch gesehen auch korrekt.
Shopware führt da, wie ich dem LogEintrag entnehme, ein rmdir aus um einen Ordner zu löschen. Ein rmdir setzt aber immer voraus, dass das zu löschende Verzeichnis leer ist.
Wenn Shopware da Dateien ablegt, dann wird rmdir nicht funktionieren um den Ordner inklusive des Inhalts zu löschen.
Shopware müsste da erst die Inhalte entfernen und könnte dann via rmdir den Ordner löschen.
Was meint Shopware dazu?
Hier der Vollständigkeit halber noch meine Fehlermeldung aus dem Cronjob:
Clearing httpcache.
In Filesystem.php line 180:
[Symfony\Component\Filesystem\Exception\IOException]
Failed to remove directory "/web/var/cache/production_202011060821/html/ci": rmdir(/var/www/clients/client1/web2/web/var/
cache/production_202011060821/html/ci): Directory not empty
Exception trace:
at /web/vendor/symfony/filesystem/Filesystem.php:180
Symfony\Component\Filesystem\Filesystem->remove() at /web/vendor/symfony/filesystem/Filesystem.php:177
Symfony\Component\Filesystem\Filesystem->remove() at /web/engine/Shopware/Components/CacheManager.php:573
Shopware\Components\CacheManager->clearDirectory() at /web/engine/Shopware/Components/CacheManager.php:165
Shopware\Components\CacheManager->clearHttpCache() at /web/engine/Shopware/Commands/WarmUpHttpCacheCommand.php:140
Shopware\Commands\WarmUpHttpCacheCommand->execute() at /web/vendor/symfony/console/Command/Command.php:255
Symfony\Component\Console\Command\Command->run() at /web/vendor/symfony/console/Application.php:987
Symfony\Component\Console\Application->doRunCommand() at /web/engine/Shopware/Components/Console/Application.php:129
Shopware\Components\Console\Application->doRunCommand() at /web/vendor/symfony/console/Application.php:255
Symfony\Component\Console\Application->doRun() at /web/engine/Shopware/Components/Console/Application.php:108
Shopware\Components\Console\Application->doRun() at /web/vendor/symfony/console/Application.php:148
Symfony\Component\Console\Application->run() at /web/bin/console:38
sw:warm:http:cache [--shopId [SHOPID]] [-c|--clear-cache] [-b|--concurrent-requests [CONCURRENT-REQUESTS]] [-k|--category] [-o|--emotion] [-g|--blog] [-m|--manufacturer] [-t|--static] [-p|--product] [-d|--variantswitch] [-z|--productwithnumber] [-y|--productwithcategory] [-x|--extensions] [--] []...
Wir haben das Problem nun seit der Umstellung von Shopware 5.5.6 auf 5.6.9 nun ebenfalls.
Hintergrund. Im Shop sind gleichzeitig immer viele user unterwegs die erzeugen ihrerseits wieder neue Files.
Selbst in der shell mit rm -rf production… kommt man da nicht weit.
Besser, “threadsafe”, ordner den man löschen möchte umbenennen, in den nicht hineingeschrieben wird, und dann löschen.
Gegebenenfalls sollte man dieses auch in Shopware implementieren, sodass auch bei Servern mit high traffic keine Fehler auftreten.
Das mit der Kategorie ist normal, kann auch GOogle sein, etc. ist nun mal so -> ignorieren.
Bei dem Cache besteht hier tatsächlich das Problem,dass zu viele zugriffe gleichzeitig das Cache leeren stört. Shopware sollte diesen Teil des Shops “Threadsafe” gestalten.
Heißt Ordner umbenennen, dann löschen.
Wir haben es nun folgendermaßen gelöst, in dem CacheManager (Shopware/Components/CacheManager.php).
Grundsätzlich genügt es hier den Ordner umzubenennen, die random_int function habe ich hier nur vorsichtshalber hereingenommen ist aber nicht wirklich nötig, nur wenn mehrere Kollegen gleichzeitig im Backend herumfuhrwerken.