Shopware 6 systemd services
In Shopware 6 werden scheduled tasks und der asynchrone Mail-Versand über queue worker abgearbeitet. Da diese nicht dauerhaft laufen sollten werden die Prozesse über Zeit & Speicherverbrauch limitiert und systemd kümmert sich um den automatischen Neustart.
Dieses HowTo basiert auf einem System mit ISPConfig 3.2 installiert auf Ubuntu 20.04 .
Systemd Service anlegen
Der Benutzer ist entesprechend anzupassen.
# immutable bit entfernen
chattr -i /var/www/clients/client1/web1
# Benutzer wechseln und Verzeichnis anlegen
su -s /bin/bash web1
mkdir -p ~/.config/systemd/user
# immutable bit neu setzen
exit
chattr +i /var/www/clients/client1/web1
# Benutzer wieder wechseln und Service anlegen
su -s /bin/bash web1
vim ~/.config/systemd/user/shopware_scheduled_task.service
[Unit]
Description=Shopware scheduled task runner
[Service]
Type=simple
Restart=always
ExecStart=/usr/bin/php7.4 /var/www/clients/client1/web1/web/bin/console scheduled-task:run --time-limit=120 --memory-limit=512M -q
[Install]
WantedBy=default.target
vim ~/.config/systemd/user/shopware_consumer.service
[Unit]
Description=Shopware Message Queue Consumer
[Service]
Type=simple
Restart=always
ExecStart=/usr/bin/php7.4 /var/www/clients/client1/web1/web/bin/console messenger:consume --time-limit=120 --memory-limit=512M -q
[Install]
WantedBy=default.target
Für den Message Consumer wird ein Zeitlimit von 120 Sekunden und ein Speicherlimit von 512 MB festgesetzt. Wird eines der Limits erreicht, so wird der Message Consumer beendet und von Systemd automatisch neu gestartet.
Systemd Service aktivieren und starten
# wieder als root
loginctl enable-linger web1
su -s /bin/bash web1
XDG_RUNTIME_DIR="/run/user/$UID" systemctl --user enable --now shopware_consumer.service
XDG_RUNTIME_DIR="/run/user/$UID" systemctl --user status shopware_consumer.service
XDG_RUNTIME_DIR="/run/user/$UID" systemctl --user enable --now shopware_scheduled_task.service
XDG_RUNTIME_DIR="/run/user/$UID" systemctl --user status shopware_scheduled_task.service
Im Anschluss sollte der Message Consumer laufen und die Nachrichten wieder zeitnah versandt werden.
Quellen
- https://www.creoline.de/support/article/60309/
- https://community.hetzner.com/tutorials/install-shopware-6#step-6---configuring-background-queue-worker