Frage: Ist es möglich, in meinem Shopware den Cache regelmäßig zu aktualisieren ohne das über das Backend erledigen zu müssen?
Antwort: Ja, ist es. Das kann über einen Cron-Job, der in regelmäßigen Intervallen läuft, gelöst werden.
Benötigt wird dazu:
- ein Cron-Skript (hier cron_cache_warmup.sh) und ggf. eine
- php.ini (zum einbinden des ioncube_loaders)
Das Cron-Skript löscht im ersten Schritt den Cache, anschließend wird ein PHP-Skript zum Aufwärmen des Caches aufgerufen.
Es werden folgende Informationen benötigt:
- PHP-Version der Domain (geht am einfachsten im Hosting-Backend/Domaineinstellungen),
- die dazu passende PHP-cli
- und den Pfad zum passenden ionCube_Loader, der über eine extra php.ini beim Skript-Aufruf eingebunden wird.
Beide Dateien, Cron-Skript und zugehörige php.ini, können im Rootverzeichnis des Auftrags in einen eigenes Verzeichnis (hier cron-cache-warmup) gelegt werden. Das macht die Zuordnung von php.ini und Skript einfacher.
Die php.ini sollte (z. B. bei php7) folgenden Inhalt haben:
[PHP] zend_optimizer.enable_loader = "1" zend_extension = "/usr/local/lib/php_modules/7-70STABLE/ioncube_loader_lin_7.0.so"
Das Cron-Skript sieht folgendermaßen aus:
#!/bin/bash # Cache leeren /Pfad/zum/Shop/cache/clear_cache.sh # Cache neu aufbauen env -i /usr/local/bin/php7.0.6-cli -c /Pfad/zur/php.ini -f /Pfad/zum/Shop/bin/console sw:warm:http:cache
Infos zum Skript:
- env -i: ruft die anschließende php-cli auf.
- -c: (Look for php.ini file in the directory path or use the specified file) dieser Parameter veranlasst die php-cli eine extra php.ini einzubinden.
- -f: (Parse and execute file) Ausführen des angegebenen Skript-Files.
Der Cron-Job selber wird im Kundenbackend angelegt.
Die Pfadangabe zum Shell-Skript darf in diesem Fall nicht mit einem ‚/‘ beginnen.
Der Cronjob sollte ca. alle 4 Stunden laufen.
Wie immer gilt: testen und Einsatz auf eigene Verantwortung