HTTPCache unlink Problem

Hallo,

in meiner php_error.log Datei sammeln sich täglich ca. 18MB von folgenden Einträgen

[18-Jun-2018 03:00:07 Europe/Berlin] PHP Warning: unlink(/var/www/vhosts/shopware/docroot/var/cache/production_201806041019/html/md/de/f4/153b46ee2b6311c7e0048d6a4a5e9a110bc0c04b77f3c62a718959a4029b): No such file or directory in /var/www/vhosts/shopware/docroot/engine/Shopware/Components/HttpCache/Store.php on line 96

Ich habe versucht den neu HTTP-Cache aufzuwären, darauf hin trat dieser Fehler 706 mal auf:

[18-Jun-2018 10:12:59 Europe/Berlin] PHP Fatal error: Call to a member function renderEsiTag() on null in /var/www/vhosts/shopware/docroot/var/cache/production_201806041019/templates/frontend_shopware_1_secure/ba/93/91/ba939110730f1dc6f3d154b76bc29f5905b02a21.snippet.index.tpl.php on line 1604

Wie kommt man diesen Fehler auf die Spur?

Hallo,

php kann eine Datei nicht löschen… ich würde erstmal den Cache löschen.

rm -R /var/www/vhosts/shopware/docroot/var/cache/production_201806041019

… und dann mal schauen.  Wink

Hi, ich lösche den Cache immer so:

#!/bin/bash

cd /var/www/vhosts/shopware/docroot/var/cache/
chmod 700 clear_cache.sh
./clear_cache.sh
rm -rf production_*

clear_cache.sh wird mitgeliefert, Inhalt ist:
 

#!/bin/bash
DIR="$(cd "$(dirname "$0")" && pwd)"

## Guard against empty $DIR
if [["$DIR" != */cache]]; then
    echo "Could not detect working directory."
    exit 1
fi

echo "Clearing caches"
mkdir $DIR/delete
find $DIR -mindepth 1 -maxdepth 1 -type d ! -name delete -print0 | xargs -I{} -0 mv {} $DIR/delete/

rm -f $DIR/../../web/cache/*.js > /dev/null
rm -f $DIR/../../web/cache/*.css
rm -f $DIR/../../web/cache/*.txt

$DIR/../../bin/console sw:generate:attributes

rm -Rf $DIR/delete/

 

Clear_cache.sh ist keine gute Lösung für einen Cron. Da werden bspw. die Attribut-Models neu erzeugt und du hast ggf. Probleme mit den Rechten. Besser kannst du das per Shopware-Konsole machen. 

Naja per Cron lasse ich das Script nicht ausführen.
Ich führe das Script immer nach einen Update mit php recovery/update/index.php aus, hier die komplette Version:

#!/bin/bash

cd /var/www/vhosts/shopware/docroot

rm UPGRADE-*.md
rm CONTRIBUTING.md
rm eula_en.txt
rm eula.txt
rm license.txt
rm README.md

rm -rf update-assets
rm update_5*.zip

chmod 700 bin/console
chgrp www-data bin/console
chmod g+rx bin/console

cd var/cache/
chmod 700 clear_cache.sh
./clear_cache.sh
rm -rf production_*

Ansonten mache ich das immer über das Backend.

Im Grubde macht das Update das schon selbst. Das wäre somit nicht notwendig. Wenn du das Script ausführst empfiehlt sich das mit dem Besitzer des Apache Prozesses zu machen, sonst passen nachher die Rechte ggf. nicht.

Hmm ja ok da müsste ich mir die Ownerships der Dateien nochmal genau ansehen.
Gibt es eine Dokumentaion welche Dateien / Ordner während dem Betrieb vom Webserver-User beschreibbar sein müssen?
Ich würde die Ordner gerne absichern so das dort kein PHP ausführbar ist.
Vor dem Update auf der Konsole würde ich die schreibrechte ggf. anpassen.
Mir behagt es nicht wenn das komplette docroot für den webserver writeable ist.
Aber wir schweifen ab.