Scheduled Tasks im Live System - wodurch angetriggert?

Hallo Zusammen,

Seit längerer Zeit stellen wir uns die Frage, wie genau die Scheduled Tasks in SW6 Live-Systemen angetriggert werden.

Während in DEV-Umgebungen die Tasks gefühlt bei Aktionen im Adminbereich ausgeführt werden, ist die PROD-Umgebung aktuell noch ein Rätsel.
Im Produktivsystem werden die Tasks mehr oder weniger zufällig ausgeführt.

Kann hier jemand von Shopware mal etwas Klarkeit ins Dunkel bringen?
Müssen wir auf unserem Server einen Cronjob einrichten, der den Konsolenbefehl bin/console scheduled-task:run ausführt oder wie genau werden die Tasks ausgeführt?

Gibt es zudem schon eine Info, wann es endlich eine Konfigurationsoberfläche für die Scheduled Tasks im Adminbereich geben wird?
Es ist durchaus unpraktikabel, wenn bspw. die Intervalle nur in der DB geändert werden können…

 

Vielen Dank und viele Grüße
Dennis

Fürs Backend gibt es bereits zwei Plugins im Store. Wie das getriggert wird würde mich auch interessieren. Am praktischsten wäre es, wenn es wieder via URL möglich wäre.

Das ist hier beschreiben https://docs.shopware.com/en/shopware-platform-dev-en/references-internals/core/module/tasks#the-task-scheduler

Wenn du nichts konfigurierst, bearbeitet der Admin Worker die Tasks. Der Admin Worker steckt zum einen die Scheduled Tasks in die Queue und arbeitet auch die Tasks in der Queue ab. Ohne login im Admin passiert also da auch nichts. Für Produktivumgebungen macht es Sinn den Admin Worker zu deaktivieren und den CLI Worker zu nutzen. Dafür muss man zwei Commands ausführen:

Scheduled Tasks in die Message Queue einstellen:

bin/console scheduled-task:run

Messages in der Queue abarbeten

bin/console messenger:consume

und Admin worker deaktivieren

# config/packages/shopware.yaml
shopware:
    admin_worker:
        enable_admin_worker: false

 

Die beiden CLI-Befehle solltest du dann als Cronjob auf deinem Server einrichten. Der Consume-Befehl sollte immer ausgeführt werden, am besten ein Time-Limit geben und direkt danach wieder neustarten, dass ist quasi ein Task der durchgehend laufen sollte.

@Moritz Naczenski schrieb:

Wenn du nichts konfigurierst, bearbeitet der Admin Worker die Tasks. Der Admin Worker steckt zum einen die Scheduled Tasks in die Queue und arbeitet auch die Tasks in der Queue ab. Ohne login im Admin passiert also da auch nichts. Für Produktivumgebungen macht es Sinn den Admin Worker zu deaktivieren und den CLI Worker zu nutzen. Dafür muss man zwei Commands ausführen:

Scheduled Tasks in die Message Queue einstellen:

bin/console scheduled-task:run

Messages in der Queue abarbeten

bin/console messenger:consume

und Admin worker deaktivieren

config/packages/shopware.yaml

shopware:
admin_worker:
enable_admin_worker: false

 

Die beiden CLI-Befehle solltest du dann als Cronjob auf deinem Server einrichten. Der Consume-Befehl sollte immer ausgeführt werden, am besten ein Time-Limit geben und direkt danach wieder neustarten, dass ist quasi ein Task der durchgehend laufen sollte.

Hallo Moritz,

Danke für die Antwort.
Wenn man aber den scheduled-task:run Befehl als Cronjob einrichtet, sollte der doch auch ein Time-Limit bekommen und regelmäßig ausgeführt werden - oder nicht?

Also hier wäre tatsächlich ein praktisches Beispiel mit Beispielzahlen und Intervallen für das Antriggern der Commands gut.
Nach meinem Verständnis Sorgt ja erst der scheduled-task:run Befehl dafür, dass die Tasks ausgeführt werden können, richtig? Also müsste auch dieser mit Time-Limit und in regelmäßigen Abständen ausgeführt werden…oder?

Gibt es ja jeweils bei den Hostern, wie bspw. hier bei Profihost: Shopware 6: Worker im Hintergrund laufen lassen - Profihost Knowhow FAQ Fragenbereich

Hallo [@Moritz Naczenski](http://forum.shopware.com/profile/14574/Moritz Naczenski „Moritz Naczenski“)‍ unser Kunde hat die entsprechenden Dinge nun auf seinem Server konfiguriert, so dass der CLI-Worker entsprechend scheduled-task:run ausführt.

Leider haben wir nun das gleiche Phänomen, welches schon vor einem halben Jahr in diesem Beitrag (https://forum.shopware.com/discussion/67988/scheduled-task-hat-den-queued-status) mitgeteilt wurde, leider bisher ohne weitere Antwort von Shopware:

  • Der Scheduled Task des Plugins springt in der Datenbank auf den Status „queued“ und wird dann nicht weiter bearbeitet.
  • Das manuelle zurücksetzen des Status auf „scheduled“ und erneute ausführen von scheduled-task:run führt zum selben Ergebnis.
  • Es tauchen auch keine Fehler auf, die Tabelle dead_message ist leer.

In einem lokalen DEV-Shop wird der Scheduled Task des Plugins korrekt ausgeführt.

Gibt der CLI worker denn irgendwelche Fehlermeldungen aus?

Naja, läuft denn messenger:consume auch auf dem Server?
scheduled-task:run legt die tasks ja nur in die queue, der messenger.consume führt die erst aus. Also ohne beide Befehle läuft das nicht.

@Moritz Naczenski schrieb:

Naja, läuft denn messenger:consume auch auf dem Server?
scheduled-task:run legt die tasks ja nur in die queue, der messenger.consume führt die erst aus. Also ohne beide Befehle läuft das nicht.

Beide Befehle sind als Cronjobs auf dem Server eingerichtet. Interessanterweise werden auch alle anderen Scheduled Tasks ausgeführt, nur der eine des einen Plugins nicht. Der wird immer nur in die queue gelegt aber nicht weiter abgearbeitet.