In Shopware 6 werden eine Vielzahl von Aufgaben asynchron abgearbeitet, das bedeutet, die Aufgaben werden in Nachrichten (Message) in einer Warteschlange (Queue) nacheinander abgearbeitet und nicht zum Zeitpunkt der Ausführung. So können Aufgaben unabhängig von Zeitüberschreitungen oder Systemabstürzen bearbeitet werden. Mögliche Aufgaben sind das Versenden von Mails, die Indexierung von Produkten oder die Generierung der Sitemap.
Immer wiederkehrende Aufgaben werden über Scheduled Tasks (geplante Aufgaben) gelöst. Mit Scheduled Tasks werden in festen Intervallen bestimmte Aufgaben der Message Queue hinzugefügt, die dann ebenfalls asynchron abgearbeitet werden. Zum Beispiel fallen hierunter die Generierung eines Exportes für Vergleichsportale oder die Prüfung, ob neue Updates zur Verfügung stehen.
Scheduled Task | Run Intervall (Sekunden) | Erläuterung |
log_entry.cleanup | 86400 | Leert die Tabelle "log_entry" |
shopware.invalidate_cache | 20 | Invalidierung des Caches |
app_update | 86400 | Prüft, ob es für die installierten Erweiterungen ein Update gibt |
app_delete | 86400 | Entfernt eine Erweiterung und die zugehörigen Plugin-Daten manuell aus der Shopware-Datenbank und den Server-Dateien |
version.cleanup | 86400 | Löscht veraltete Version-ID aus der Datenbank |
webhook_event_log.cleanup | 86400 | Löscht Webhook-Ereignisprotokolle, die älter als die eingestellte Zeit sind |
sales_channel_context.cleanup | 86400 | Leert die Tabelle "sales_channel_context" |
product_keyword_dictionary.cleanup | 604800 | Leert die Tabelle "product_keyword_dictionary" |
product_download.media.cleanup | 2628000 | Löscht nicht zugewiesene Bilder |
delete_newsletter_recipient_task | 86400 | Löscht alle nicht bestätigten Newsletterempfänger, deren Registrierungsversuch länger als 30 Tage zurück liegt. |
product_stream.mapping.update | 86400 | Updatet das Mapping |
product_export_generate_task | 60 | Triggert den Produkt-Export |
import_export_file.cleanup | 86400 | Leert die Tabelle "import_export_file" |
shopware.sitemap_generate | 86400 | Generiert die Sitemap |
cart.cleanup | 86400 | Löscht alle Warenkörbe, die älter als 120 (shopware.cart.expire_days) Tage sind |
shopware.elasticsearch.create.alias | 300 | Triggert die Erstellung von Elastic Search Alias, dies wird nur bei Bedarf ausgeführt |
Einige Tasks wie shopware.elasticsearch.create.alias und shopware.invalidate_cache werden nur bei Bedarf ausgeführt. Die Elasticsearch-Aufgabe wird nur ausgeführt, wenn ein Elasticsearch-Server konfiguriert und aktiviert ist.
In einer standardmäßigen Installation von Shopware werden Aufgaben der Message Queue in der Datenbank gespeichert und über den Browser bearbeitet, sofern du in der Administration angemeldet bist. Dies ist eine einfache und schnelle Methode, wird aber nicht für den Einsatz in Produktionssystemen empfohlen.
Die Funktionsweise des Admin Worker erfordert, dass die Administration über einen längeren Zeitraum geöffnet ist, andernfalls werden keine Aufgaben abgearbeitet. Wenn eine große Anzahl von Benutzern an der Administration angemeldet sind, kann dies zu einer hohen CPU-Last führen. In solchen Fällen ist es ratsam, den Admin Worker zu deaktivieren und die Prozesse serverseitig über die CLI laufen auszuführen. Auf diese Weise werden Aufgaben auch dann abgearbeitet, wenn niemand in der Administration angemeldet ist und eine hohe CPU-Last durch mehrere Benutzer wird ebenfalls vermieden. Diese Vorgehensweise ist besonders bei größeren Shops sinnvoll.
Der CLI-Worker ist ein Worker, der direkt auf dem Server eingerichtet werden kann. Er wird für die Ausführung von Hintergrund-Jobs verwendet, dabei steht "CLI" für "Command Line Interface", was bedeutet, dass dieser Aufgaben über die Befehlszeile ausführen kann. Der CLI-Worker kümmert sich um Aufgaben, wie die Ausführung von Indexierungen und anderen Prozessen, die nicht direkt im Frontend des Shopware-Admins stattfinden müssen. Dabei können die Befehle ebenfalls als Cronjob oder als Service eingerichtet werden, sodass diese regelmäßig im Hintergrund durchgeführt werden können.
Mehr Informationen findest du in unsere Developer-Dokumentation.
Wie erläutert, wird der Einsatz des Admin Worker nicht für Produktivsysteme empfohlen, der folgende Abschnitt erläutert, wie der Admin Worker deaktiviert werden kann und die Message Queue / Scheduled Tasks serverseitig ausgeführt werden.
Die folgenden Einstellungen erfolgen direkt auf dem Server. Da die Möglichkeiten der Serverkonfiguration vom Hoster abhängt, erläutern wir dies hier allgemein. Bei Fragen zur Bedienung der Serverkonfiguration sollte der Support Deines Hosters weiterhelfen können.
Bei allen neuen Shopware-Projekten findet sich in der Installation unter config/packages/ nur noch eine lock.yaml Datei. Dies kann auch der Fall sein, wenn du ein Update durchgeführt hast und die .yaml Dateien unter config/packages/ im Standard waren.
Sollte dies bei dir der Fall sein, musst du eine neue shopware.yaml Datei erstellen und hier die Anpassungen einfügen!
Um den Admin-Worker zu deaktivieren, muss die Änderung in der Datei z-shopware.yaml vorgenommen werden, damit die Änderung auch Update sicher ist. Du findest diese in Deiner Shopware-Installation unter config/packages/. Sollte die Datei fehlen, so erstelle diese bitte.
Deaktiviere den Admin-Worker indem du den Wert "false" einträgst und speichere die Datei ab. Deine Datei sollte nun folgendermaßen aussehen:
# config/packages/shopware.yaml
shopware:
admin_worker:
enable_admin_worker: false
Damit die Message Queue und die Scheduled Tasks nun ausgeführt werden, müssen die Prozesse über die CLI gestartet werden.
Message Queue:
bin/console messenger:consume async low_priority --time-limit=60
Wichtig ist, dass sich der Befehl ab der Shopware Version 6.5 geändert hat. Der alte CLI-Command mit dem Wert "default" wird fehlschlagen.
Scheduled Tasks:
bin/console scheduled-task:run --time-limit=60
Wir empfehlen bei den oben stehenden Befehlen den Parameter time-limit=60, sodass der Befehl für maximal 60 Sekunden ausgeführt wird. Alternativ /zusätzlich kannst du anstatt eines Zeitlimits auch ein Speicherlimit definieren, dies ist mit dem Parameter --memory-limit=512M möglich. Mehr Informationen findest du in unserer Developer Doku.
Wichtig ist bei diesem Vorgang, dass die Befehle regelmäßig ausgeführt werden, damit die Message Queue kontinuierlich abgearbeitet wird. Dies kann zum Beispiel durch das Anlegen eines Cronjobs oder eines Services auf dem Server erreicht werden. Wende Dich hierzu an Deinen Hoster.
Im nächsten Schritt solltest du Dich entscheiden, wie du die Message Queue abarbeiten möchtest. Du kannst die oben genannten Befehle als Cronjob einrichten oder den CLI-Worker als Service einrichten.
Mehr Informationen dazu erfährst du hier.
Einige Hoster stellen in Ihren Wissensbereichen Artikel zur Verfügung, in denen beschrieben wird, wie die Einrichtung dort zu erfolgen hat.
Bei Profihost findest du weitere Informationen zur Einrichtung unter https://wissen.profihost.com/wissen/artikel/shopware-6-worker-im-hintergrund-laufen-lassen/
Hetzner stellt die Informationen bereit unter
https://community.hetzner.com/tutorials/install-shopware-6#step-6---configuring-background-queue-worker
Creoline stellt die Informationen bereit unter
https://help.creoline.com/doc/shopware-6-background-queue-worker-einrichten-XLBEPcGmlt
Timme Hosting stellt die Informationen bereit unter
https://timmehosting.de/shopware-6-admin-worker-deaktivieren