Message-Queue-Worker einrichten
Admin-Worker abschalten und einen dauerhaft laufenden CLI-Worker per Supervisor, systemd oder Cron betreiben.
Admin-Worker abschalten
Shopware bringt einen „Admin-Worker“ mit, der die Queue nur abarbeitet, solange jemand in der Administration eingeloggt ist. Für Live-Shops ist das nicht verlässlich. Shopware empfiehlt, ihn abzuschalten und einen CLI-Worker zu betreiben:
# config/packages/shopware.yamlshopware: admin_worker: enable_admin_worker: false
CLI-Worker starten
bin/console messenger:consume async low_priority --time-limit=60 --memory-limit=512M
asyncist der Transport, über den das Order Tracking läuft.low_prioritybraucht Shopware selbst.--time-limitund--memory-limitbeenden den Worker regelmäßig, ein Prozessmanager startet ihn neu. So sammelt sich kein Speicher an und neuer Code wird nach einem Deployment geladen.
Der Worker muss ständig laufen. Dafür gibt es drei übliche Wege.
Supervisor (empfohlen)
; /etc/supervisor/conf.d/shopware-worker.conf[program:shopware-worker]command=php /var/www/shopware/bin/console messenger:consume async low_priority --time-limit=60 --memory-limit=512Muser=www-datanumprocs=1autostart=trueautorestart=truestartsecs=0process_name=%(program_name)s_%(process_num)02dstdout_logfile=/var/log/shopware-worker.logredirect_stderr=true
supervisorctl reread && supervisorctl update && supervisorctl status
systemd
# /etc/systemd/system/[email protected][Unit]Description=Shopware Message Queue Worker %iAfter=network.target mysql.service[Service]User=www-dataExecStart=/usr/bin/php /var/www/shopware/bin/console messenger:consume async low_priority --time-limit=60 --memory-limit=512MRestart=alwaysRestartSec=1[Install]WantedBy=multi-user.target
systemctl daemon-reload && systemctl enable --now shopware-worker@1
Cron
Wenn weder Supervisor noch systemd zur Verfügung stehen, etwa bei manchem Shared Hosting:
* * * * * php /var/www/shopware/bin/console messenger:consume async low_priority --time-limit=55 --memory-limit=512M >/dev/null 2>&1
Managed Hoster wie maxcluster, Mittwald oder timmehosting bieten Shopware-Worker meist direkt im Kundenportal an. Dann reicht es, den Worker dort mit den Transports async low_priority anzulegen.
Nach Updates neu starten
Mehrere Worker parallel sind kein Problem. Nach jedem Deployment bzw. Plugin-Update die laufenden Worker neu starten, damit sie den neuen Code laden:
bin/console messenger:stop-workers
Scheduled Tasks
Das Order Tracking selbst braucht keine Scheduled Tasks. Shopware braucht sie aber für vieles andere, deshalb sollte im Live-Shop ohnehin bin/console scheduled-task:run als Dienst laufen – genau wie der Worker.