Shopware 6 Background Queue Worker einrichten (Root-Rechte)

Dieser Artikel beschränkt sich auf die Einrichtung und Steuerung der Shopware 6 Background Queue Workern mit root-Rechten. Sofern Sie nur über eingeschränkten Zugriff auf Ihren Server verfügen, nutzen Sie bitte den Artikel: Shopware 6 Background Queue Worker einrichten (User-Rechte)


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 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 FPM 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 <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


bin/console darf niemals mit root-Rechten ausgeführt werden! Bitte immer vorher als Systembenutzer anmelden.


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.2/bin/php /var/www/vhosts/meine-shop-domain.de/httpdocs/bin/console cache:clear



Einrichtung der Message Queue Worker als systemd Service

Um eine dauerhafte Ausführung der Message Queue Worker zu gewährleisten, empfehlen wir die Einrichtung als systemd Service. Hierzu müssen zwei service Dateien angelegt werden:


Ab hier werden root-Rechte benötigt

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.3/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.