Admin Worker in Shopware 6 deaktivieren

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


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 08.04.2024