In diesem Beitrag erfahren Sie, wie Sie den Admin Worker in Shopware 6 deaktivieren und die Message Queue stattdessen mithilfe des CLI Workers verwalten können.
Hinweis: Bitte beachten Sie, dass dies nur bis Shopware 6.4 (Shopware >= 6.4) geht.
Bei Shopware 6 ist standardmäßig der sogenannte Admin Worker aktiviert, der Aufgaben asynchron im Hintergrund durchführt. Diese Aufgaben befinden sich in der Message Queue und werden ausgelöst, wenn ein Benutzer im Shopware-Admin angemeldet ist.
Bei einer großen Anzahl an im Shopware-Admin eingeloggten Nutzern kann jedoch die CPU-Last so stark ansteigen, dass die Ausführung der Aufgaben gestört wird. Zudem werden keine Aufgaben ausgeführt, wenn sich kein eingeloggter Benutzer im Shopware-Admin befindet. Dies kann beispielsweise Aufgaben betreffen, die in der Nacht durchgeführt werden sollen.
Die offizielle Empfehlung von Shopware lautet daher, den Admin Worker zu deaktivieren und zum Abarbeiten der Message Queue stattdessen den CLI Worker zu verwenden. Für die Einrichtung stehen verschiedene Optionen zur Verfügung. Eine mögliche Vorgehensweise besteht darin, die Message Queue über einen Cronjob aufzurufen. Alternativ kann sie auch über einen Prozessverwaltungsdienst wie Supervisor oder Systemd aufgerufen werden.
Admin Worker deaktivieren
Um den Admin Worker zu deaktivieren, muss die folgende Konfiguration in der Datei config/packages/shopware.yaml hinzugefügt werden:
shopware:
admin_worker:
enable_admin_worker: false
Nachdem der Admin Worker deaktiviert worden ist, müssen die Prozesse scheduled-task:run sowie messenger:consume gestartet werden.
Dazu stellen wir im Folgenden drei verschiedene Möglichkeiten vor:
Message Queue via Cronjob aufrufen
Um die beiden Prozesse Consumer und Scheduled Task mit Hilfe von Cronjobs auszuführen, tragen Sie bitte die folgenden Zeilen in Ihre Crontab-Liste ein:
*/3 * * * * /usr/bin/php /var/www/share/demoshop.com/shopware/bin/console
scheduled-task:run --time-limit=120
*/3 * * * * /usr/bin/php /var/www/share/demoshop.com/shopware/bin/console messenger:consume --time-limit=120
Damit werden beide Prozesse automatisch alle drei Minuten ausgeführt. Die Laufzeit beider Prozesse beträgt dabei jeweils zwei Minuten. Die Laufzeiten sollen sicherstellen, dass die Prozesse nicht mehrfach parallel gestartet werden. Shopware empfiehlt die Einstellung einer kurzen Laufzeit, um Memory Leaks bei lang laufenden PHP-Prozessen zu vermeiden.
Message Queue via Supervisor aufrufen
Hinweis: Wenn Sie die Message Queue via Supervisor aufrufen, muss Supervisor im Managed Center installiert sein. Eine Anleitung, wie Sie Supervisor installieren, finden Sie hier.
Um die Verwaltung der Prozesse mit Hilfe von Supervisor durchzuführen, können Sie die folgenden Konfigurationsvorlagen für den Consumer sowie den Scheduled Task nutzen. Wenn der Prozess durch das Zeitlimit beendet wird, sorgt Supervisor für einen Neustart. Über numprocs lässt sich festlegen, wie viele Prozesse gleichzeitig gestartet werden sollen. In der Regel reicht hier ein Prozess aus. Nur bei sehr großen Instanzen oder vielen Aufgaben lohnt sich eine Erhöhung.
Consumer
[program:messenger-consumer]
command=php /var/www/share/demoshop.com/shopware6/bin/console messenger:consume --time-limit=120
numprocs=1
startsecs=0
autostart=true
autorestart=true
process_name=%(program_name)s_%(process_num)02d
Scheduled Task
[program:scheduled-task]
command=php /var/www/share/demoshop.com/shopware6/bin/console scheduled-task:run --time-limit=120
numprocs=1
startsecs=0
autostart=true
autorestart=true
process_name=%(program_name)s_%(process_num)02d
Message Queue via Systemd aufrufen
Um die beiden Prozesse via Systemd auszuführen, können Sie die unten dargestellten Systemd Units verwenden.
Mit den beiden Units wird jeweils der Consumer und der Scheduled Task von Systemd gestartet und verwaltet. Der Parameter time-limit dient dazu, die Laufzeit der Prozesse gering zu halten, während der Parameter memory-limit dafür sorgt, dass sie nicht mehr als 512 MB RAM beanspruchen. Nach Ablauf des Zeitlimits endet der Prozess und Systemd sorgt für einen entsprechenden Neustart. Gegebenenfalls müssen Sie den Pfad zu Ihrer Shopware-Instanz, welche bin/console enthält, ersetzen.
Consumer
Die Datei muss mit folgendem Inhalt in /etc/systemd/system/shopware_consumer.service abgelegt werden:
[Unit]
Description=Shopware Consumer
After=mysql.service
[Service]
Type=simple
User=web-user
Group=web-user
Restart=always
ExecStart=/usr/bin/php /var/www/share/demoshop.com/shopware/bin/console messenger:consume --time-limit=60 --memory-limit=512M
[Install]
WantedBy=multi-user.target
Scheduled Task
Die Datei muss mit folgendem Inhalt in /etc/systemd/system/shopware_scheduled_task.service abgelegt werden:
[Unit]
Description=Shopware Scheduled Task
After=mysql.service
[Service]
Type=simple
User=web-user
Group=web-user
Restart=always
ExecStart=/usr/bin/php /var/www/share/demoshop.com/shopware/bin/console scheduled-task:run --time-limit=60 --memory-limit=512M
[Install]
WantedBy=multi-user.target
Bei Fragen steht Ihnen unser Support telefonisch unter 05251/414130 oder per E-Mail an support@maxcluster.de zur Verfügung.
Veröffentlicht am 21.06.2024