Set up Shopware 6 Background Queue Worker (Unmanaged Server)
This article refers to the setup and control of the Shopware 6 Background Queue Worker for servers in the support level "Unmanaged". If you have ordered your Shopware server in the support level "Managed", please use the following article: Set up Shopware 6 Background Queue Worker (Managed Server)
Shopware 6 uses so-called message queue workers for the processing of background tasks as well as for the processing of recurring tasks. In the standard configuration of Shopware 6, these are executed via the logged-in administrator in the browser. As soon as more than one administrator is logged in, these message queue workers are executed multiple times and this can lead to a very high CPU load and problems with the execution of PHP.
To solve this problem permanently, Shopware 6 offers the option of moving the execution of these message queue workers to the background, more precisely as a CLI command.
Deactivation of the Frontend Message Queue Worker
To deactivate the Shopware 6 Message Queue Worker for the logged in administrators, a zz-creoline.yaml config file must be created as system user in the Shopware directory /config/packages
.
To do this, first log in as a system user:
su -l <SYSTEMUSER>
And now create the config file:
nano config/packages/zz-creoline.yaml
Tip: On our managed Shopware servers, the correct document root directory is located under the absolute path: /var/www/vhosts/my-shop-domain.com/httpdocs/
# /var/www/vhosts/meine-shop-domain.de/httpdocs/config/packages/zz-creoline.yaml
shopware:
admin_worker:
enable_admin_worker: false
After the config file has been created, the Shopware cache must be cleared so that the new configuration file is activated:
bin/console cache:clear
Please make sure that the Shopware bin/console
commands are always executed as the system user.
With our Managed Shopware Servers, various PHP binaries are available for executing the CLI console. To clear the cache with the PHP 8.2 CLI, the following command must be executed:
/opt/plesk/php/8.2/bin/php /var/www/vhosts/meine-shop-domain.de/httpdocs/bin/console cache:clear
Setting up the Message Queue Worker as a systemd service
To ensure a permanent execution of the Message Queue Worker, we recommend setting it up as a systemd service. Two service files must be created for this:
From this point on, root
rights are required
touch /etc/systemd/system/shopware_consumer.service
touch /etc/systemd/system/shopware_scheduled_tasks.service
The Shopware Message Queue Consumer is then defined as follows:
# /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
If you are using an older Shopware version, the default
receiver must be added here as an alternative. Example for 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
If you have registered more than one receiver, you can specify several receivers in succession or define a separate service for each receiver. Example for several receivers:
messenger:consume default receiver2 fasttrack
You can use the pre-installed text editor nano
or vi
to edit the file. Example for opening and editing the file:
nano /etc/systemd/system/shopware_consumer.service
Then paste the content shown above from the clipboard and save the changes with the keyboard shortcut CTRL + X
. Then confirm the file change with the Y
and Enter
keys.
Important: Make sure that the directories and system users are correct. In this example, the installation is located in the directory /var/www/vhosts/meine-shop-domain.de/. This directory serves only as an example and must be adapted to the correct path of your installation.
In addition to the consumer service, the service for recurring tasks is also required:
# /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
Important: The correct directory and the corresponding system user for your Shopware 6 installation must also be specified for the Scheduled Tasks Service.
After the two services have been set up, they only need to be started:
systemctl start shopware_consumer
systemctl start shopware_scheduled_tasks
systemctl enable shopware_consumer
systemctl enable shopware_scheduled_tasks
Tip: If changes are subsequently made to one or more systemd services, the command systemctl daemon-reload
must be executed for the recent changes to take effect.