Cache und das nervige Permission denied

Als Benutzer einer Professional Edition erlaube ich mir noch mal nachzufragen, wann dieses nervige 503 Error Problem beim Aufrufen der Seite “Cache / Performance” behoben wird: exception 'UnexpectedValueException' with message 'RecursiveDirectoryIterator::\_\_construct(/var/www/vhosts/.../subdomains/shopware/cache/general/shopware--Shopware/shopware--Config/shopware--1): failed to open dir: Permission denied' in /var/www/vhosts/.../subdomains/shopware/engine/Shopware/Components/CacheManager.php:345 Stack trace: #0 [internal function]: RecursiveDirectoryIterator-\>\_\_construct('/var/www/vhosts...', 4096) #1 /var/www/vhosts/.../subdomains/shopware/engine/Shopware/Components/CacheManager.php(345): RecursiveDirectoryIterator-\>getChildren() #2 /var/www/vhosts/.../subdomains/shopware/engine/Shopware/Components/CacheManager.php(239): Shopware\Components\CacheManager-\>getDirectoryInfo('/var/www/vhosts...') #3 /var/www/vhosts/.../subdomains/shopware/engine/Shopware/Controllers/Backend/Cache.php(63): Shopware\Components\CacheManager-\>getConfigCacheInfo() #4 /var/www/vhosts/.../subdomains/shopware/engine/Library/Enlight/Controller/Action.php(159): Shopware\_Controllers\_Backend\_Cache-\>getInfoAction() #5 /var/www/vhosts/.../subdomains/shopware/engine/Library/Enlight/Controller/Dispatcher/Default.php(528): Enlight\_Controller\_Action-\>dispatch('getInfoAction') #6 /var/www/vhosts/.../subdomains/shopware/engine/Library/Enlight/Controller/Front.php(228): Enlight\_Controller\_Dispatcher\_Default-\>dispatch(Object(Enlight\_Controller\_Request\_RequestHttp), Object(Enlight\_Controller\_Response\_ResponseHttp)) #7 /var/www/vhosts/.../subdomains/shopware/engine/Shopware/Kernel.php(141): Enlight\_Controller\_Front-\>dispatch() #8 /var/www/vhosts/.../subdomains/shopware/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpCache/HttpCache.php(472): Shopware\Kernel-\>handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #9 /var/www/vhosts/.../subdomains/shopware/engine/Shopware/Components/HttpCache/AppCache.php(256): Symfony\Component\HttpKernel\HttpCache\HttpCache-\>forward(Object(Symfony\Component\HttpFoundation\Request), true, NULL) #10 /var/www/vhosts/.../subdomains/shopware/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpCache/HttpCache.php(243): Shopware\Components\HttpCache\AppCache-\>forward(Object(Symfony\Component\HttpFoundation\Request), true) #11 /var/www/vhosts/.../subdomains/shopware/engine/Shopware/Components/HttpCache/AppCache.php(102): Symfony\Component\HttpKernel\HttpCache\HttpCache-\>pass(Object(Symfony\Component\HttpFoundation\Request), true) #12 /var/www/vhosts/.../subdomains/shopware/shopware.php(109): Shopware\Components\HttpCache\AppCache-\>handle(Object(Symfony\Component\HttpFoundation\Request)) #13 {main} Meine Notlösung sieht aktuell so aus, dass ich per SSH den kompletten Cache-Ordner killen muss - das ist jedoch keine Dauerlösung.

1 „Gefällt mir“

Welche Rechte hat der Cache Ordner denn? Könntest du ls -lha posten? Die Meldung sieht eher so aus alsob dein PHP-User nicht die Rechte hat die Daten in diesem Ordner zu löschen/anzufassen, anstatt daß das ein Shopware-Lösbares Problem sei. LG Marc

drwxrwxrwx 5 root root 4.0K Sep 24 11:39 . drwxr-xr-x 14 ... psacln 4.0K Feb 5 08:50 .. drwxrwxrwx 3 root root 4.0K Sep 24 11:39 core drwxrwxrwx 11 root root 4.0K Sep 24 11:39 Library drwxrwxrwx 9 root root 4.0K Jan 7 10:41 Shopware [quote]PHP-User nicht die Rechte hat[/quote] Das ist Korrekt! Teilweise werden die Cache-Dateien als PHP-User anlegt, und teilweise als User Root. Dieses Verhalten kann ich aber nicht beeinflussen, wüsste jedenfalls jetzt nicht wie. Das wird hin und wieder automatisch von Shopware gemacht. Nur warum?

Sorry ich hätte spezifischer sein sollen. Ich wollte eig. sehen welche Rechte der Ordner cache/ hat, der sich im root deiner Shopware-Installation befindet, das was du mir gepostet hast ist der Inhalt von engine/ Aber wie dem auch sei, Shopware sollte eig. keine Datei als ein anderer user als dein PHP-User (wahrscheinlich www-data) anlege KÖNNEN weil es ja nur PHP Skripte sind, die ganzen root-erstellten Dateien sind von der ursprünglichen installation die du als root durchgeführt haben musst. Du könntest einfach deinen Cache Ordner auf 777 setzen mit chmod -R 777 cache/ LG Marc

Das mit “chmod -R 777” hält nur von kurzer Dauer. Ein paar Änderungen am Layout, Cache leeren und das Problem ist wieder da :frowning: Wie gesagt, aktuell löse ich das Problem mit einer radikalen Leerung der Cache-Ordner - bis der Fehler erneut auftritt. [Nachtrag] Hier noch mal das Problem als Screen:

hi, wird dein Cache-Verzeichnis evtl. noch von anderen Systemen genutzt? Shopware ändert ja die rechte an dem Verzeichnis nicht. Es gibt zb bei All-Inkl. auch Probleme mit dem logs-Verzeichnis. Dieses wird dort auch vom Server genutzt und die Schreibrechte immer wieder neu gesetzt. Könnte es sein dass das bei dir auch der Fall ist un dein Cache-Verzeichnis serverseitig noch anders genutzt wird? Viele Grüße, Heiko

Interessante Überlegung, tritt hier aber nicht zu. Ich sehe dass die Cache-Dateien teilweise unterschiedliche Benutzer haben. In diesem Zusammenhang stelle ich mir aber eben die Frage, ob da eventuell der Cronjob mit zu tun hat, denn dieser wird über Root ausgeführt. Der Cache-Ordner selber hat Benutzer root (durch die Installation). Auch die Unterverzeichnisse haben root als Benutzer.

Vermutlich würde es hier keine Probleme geben, wenn alle Cache-Dateien auf 777 laufen würden. Aktuell werden sie aber mit 771 angelegt. Und wo ich eben dabei bin diesen Beitrag zu schreiben, wieder ein Error 503 :frowning: /shopware/cache/general 0777 Benutzer root shopware/cache/general/shopware–8 0771 Benutzer PHP-User shopware/cache/general/shopware–8/shopware–87 0771 Benutzer root Und so geht das ständig :frowning:

1 „Gefällt mir“

Mit zwei “Usern” zu hantieren, ist wirklich keine gute Idee :wink: Wenn Dein cron aber eh mit “root” läuft a) Dann würde ich mir ein Shell oder PHP script bauen, welches zunächst von cron aufgerufen wird, welches dann a) den shopware-cron startet und danach b) rekursiv die Verzeichnisrechte ändert / anpasst. Oder: b) Alle Verzeichnisse und Dateien auf den PHP-User umstellen und im cron den Scriptaufruf mit “sudo” als “PHP-User” ausführen. Bei a) besteht dann aber immer noch ein kleines Zeitfenster, wo die Rechte nicht passen und zum Fehler führn können Das sind zwar auch keine saubere Lösungen, aber ggf. ein Workaround :wink: *nur ein Gedankengang*

[quote]Mit zwei „Usern“ zu hantieren, ist wirklich keine gute Idee ;-)[/quote] Das ist völlig richtig, und genau der Knackpunkt der vermutlich durch Shopware selbst verursacht wird. Jedenfalls kann ich aktuell diesen Zustand nicht ändern.

1 „Gefällt mir“