Shopware 6 Background Queue Worker einrichten (Unmanaged Server)

Dieser Artikel bezieht sich auf die Einrichtung und Steuerung der Shopware 6 Background Queue Worker für Server im Support-Level "Unmanaged". Sofern Sie Ihren Shopware Server im Support-Level "Managed" bestellt haben, nutzen Sie bitte folgenden Artikel: Shopware 6 Background Queue Worker einrichten (Managed Server)


Shopware 6 verwendet für die Verarbeitung von Hintergrundaufgaben sowie für die Verarbeitung von wiederkehrenden Aufgaben sogenannte Message Queue Worker. In der Standard-Konfiguration von Shopware 6 werden diese über den angemeldeten Administrator im Browser ausgeführt. Sobald mehr als ein Administrator angemeldet ist, werden diese Message Queue Worker mehrfach ausgeführt und es kann zu einer sehr hohen CPU Last sowie zu Problemen bei der Ausführung von PHP kommen.


Um dieses Problem dauerhaft zu lösen, bietet Shopware 6 die Möglichkeit, die Ausführung dieser Message Queue Worker in den Hintergrund zu verlagern, genauer gesagt als CLI Command.



Deaktivierung der Frontend Message Queue Worker

Um die Shopware 6 Message Queue Worker für die angemeldeten Administratoren zu deaktivieren, muss eine zz-creoline.yaml Config Datei als Systembenutzer im Shopware Verzeichnis /config/packages angelegt werden.


Melden Sie sich dazu zuerst als Systembenutzer an:

su -l <SYSTEMBENUTZER>

Und erzeugen Sie nun die Config Datei:

nano config/packages/zz-creoline.yaml


Tipp: Bei unseren Managed Shopware Servern befindet sich das korrekte Document-Root Verzeichnis unter dem absoluten Pfad: /var/www/vhosts/meine-shop-domain.de/httpdocs/


# /var/www/vhosts/meine-shop-domain.de/httpdocs/config/packages/zz-creoline.yaml

shopware:
    admin_worker:
        enable_admin_worker: false


Nachdem die Config-Datei erstellt wurde, muss der Shopware Cache geleert werden, damit die neue Konfigurationsdatei aktiviert wird:

bin/console cache:clear


Bitte stellen Sie sicher, dass die Shopware bin/console Befehle immer als Systembenutzer ausgeführt werden.


Bei unseren Managed Shopware Servern stehen verschiedene PHP-Binaries für die Ausführung der CLI Konsole zur Verfügung. Um den Cache mit der PHP 8.2 CLI zu leeren, muss folgendes Command ausgeführt werden:

/opt/plesk/php/8.4/bin/php /var/www/vhosts/meine-shop-domain.de/httpdocs/bin/console cache:clear



Einrichtung der Message Queue Worker als Supervisor Service (empfohlen)

Lösungsvariante 1


Um eine dauerhafte Ausführung der Message Queue Worker zu gewährleisten, empfehlen wir die Einrichtung als Supervisor-Service. Hierzu müssen folgende Dateien erzeugt werden:

touch /etc/supervisor/conf.d/shopware-tasks.conf


# /etc/supervisor/conf.d/shopware-tasks.conf

# Copyright (C) 2025 creoline GmbH
# Supervisor Service - Shopware 6
# Version: 1.0.4

# Shopware Consumer
[program:shopware-consumer]
process_name=%(program_name)s_%(process_num)02d
numprocs=1
command=/opt/plesk/php/8.3/bin/php /var/www/vhosts/__DOMAIN__/httpdocs/bin/console messenger:consume async failed low_priority --time-limit=120 --memory-limit=512M
environment=MESSENGER_CONSUMER_NAME="shopware_consumer_%(process_num)02d"
user=__SSH_USERNAME__
autostart=true
autorestart=true
startsecs=0
stopwaitsecs=3600
redirect_stderr=true
stdout_logfile=/var/log/supervisor/%(program_name)s.log

<br>

# Shopware Scheduled Tasks
[program:shopware-scheduled-tasks]
process_name=%(program_name)s_%(process_num)02d
numprocs=1
command=/opt/plesk/php/8.3/bin/php /var/www/vhosts/__DOMAIN__/httpdocs/bin/console scheduled-task:run --time-limit=120 --memory-limit=512M
user=__SSH_USERNAME__
autostart=true
autorestart=true
startsecs=0
stopwaitsecs=3600

redirect_stderr=true
stdout_logfile=/var/log/supervisor/%(program_name)s.log


Ersetzen Sie im Anschluss die Variablen __SSH_USERNAME__ und __DOMAIN__ durch den SSH-Systembenutzer Ihrer Shopware-Instanz sowie die Domain Ihrer Instanz.

sed -i 's/__SSH_USERNAME__/creoline-demo-user/g' /etc/supervisor/conf.d/shopware-tasks.conf

sed -i 's/__DOMAIN__/creoline-demo.com/g' /etc/supervisor/conf.d/shopware-tasks.conf


Starten Sie im Anschluss Supervisor neu:

systemctl restart supervisor.service



Einrichtung der Message Queue Worker als systemd Service

Lösungsvariante 2


Um eine dauerhafte Ausführung der Message Queue Worker zu gewährleisten, kann die Einrichtung auch als systemd Service erfolgen. Hierzu müssen zwei Systemd-Service Dateien angelegt werden:


touch /etc/systemd/system/shopware_consumer.service

touch /etc/systemd/system/shopware_scheduled_tasks.service


Anschließend wird der Shopware Message Queue Consumer wie folgt definiert:

# /etc/systemd/system/shopware_consumer.service

[Unit]
Description=Shopware Message Queue Consumer
After=mysql.service
StartLimitIntervalSec=0

[Service]
Type=simple
User=ssh_example_user
Restart=always
RestartSec=10
ExecStart=/opt/plesk/php/8.4/bin/php /var/www/vhosts/meine-shop-domain.de/httpdocs/bin/console messenger:consume async failed --time-limit=120 --memory-limit=512M

[Install]
WantedBy=multi-user.target


Sofern Sie eine ältere Shopware Version einsetzen, muss hier alternativ der default Receiver hinzugefügt werden. Beispiel für default Receiver:

ExecStart=/opt/plesk/php/8.3/bin/php /var/www/vhosts/meine-shop-domain.de/httpdocs/bin/console messenger:consume failed default --time-limit=120 --memory-limit=512M


Sofern Sie mehr als nur einen Receiver registriert haben, können Sie mehrere Receiver hintereinander angeben oder für jeden Receiver einen eigenen Service definieren. Beispiel für mehrere Receiver:

messenger:consume default receiver2 fasttrack


Zum Bearbeiten der Datei können Sie den vorinstallierten Texteditor nano oder vi verwenden. Beispiel zum Öffnen und Bearbeiten der Datei:

nano /etc/systemd/system/shopware_consumer.service


Fügen Sie anschließend den oben abgebildeten Inhalt aus der Zwischenablage ein und speichern Sie die Änderungen mit dem Tastaturkürzel STRG + X. Bestätigen Sie die Dateiänderung anschließend mit der Taste Y und Enter.


Wichtig: Achten Sie auf korrekte Angaben von Verzeichnissen und korrekten Systembenutzern. In diesem Beispiel befindet sich die Installation in dem Verzeichnis /var/www/vhosts/meine-shop-domain.de/. Dieses Verzeichnis dient nur als Beispiel und muss auf den korrekten Pfad Ihrer Installation angepasst werden.


Neben dem Consumer Service wird zusätzlich noch der Service für die wiederkehrenden Aufgaben benötigt:

# /etc/systemd/system/shopware_scheduled_tasks.service

[Unit]
Description=Shopware Scheduled Tasks Runner
After=mysql.service
StartLimitIntervalSec=0

[Service]
Type=simple
User=ssh_example_user
Restart=always
RestartSec=10
ExecStart=/opt/plesk/php/8.3/bin/php /var/www/vhosts/meine-shop-domain.de/httpdocs/bin/console scheduled-task:run --time-limit=120 --memory-limit=512M

[Install]
WantedBy=multi-user.target


Wichtig: Auch bei dem Scheduled Tasks Service muss das korrekte Verzeichnis und der entsprechende Systembenutzer für Ihre Shopware 6 Installation angegeben werden.


Nachdem die beiden Services eingerichtet wurden, müssen diese nur noch gestartet werden:

systemctl start shopware_consumer
systemctl start shopware_scheduled_tasks

systemctl enable shopware_consumer
systemctl enable shopware_scheduled_tasks


Tipp: Werden nachträglich Änderungen an einem oder mehreren systemd-Services durchgeführt, muss der Befehl systemctl daemon-reload durchgeführt werden, damit die kürzlichen Änderungen wirksam werden.