Laufzeit von Scheduled Tasks

Hallo zusammen,

ich möchte in einem System (Shopware 6.2.1) Tasks laufen lassen, wie z.B. einen Produktimport, Lagerbestandsimport, etc. Die Scheduled Tasks sind auf „alle 5 Minuten“ eingerichtet und funktionieren grundsätzlich. Crontab sieht aktuell wie folgt aus:

*/5 * * * * cd /pfad && php7.2 bin/console scheduled-task:run --time-limit=120
*/5 * * * * cd /pfad && php7.2 bin/console messenger:consume --time-limit=120

Es ist so, dass so ein Produktimport aufgrund der Datenmenge auch mal gerne 45 Minuten dauern könnte. Sehe ich das richtig, dass mit dem oben genannten Cron diese aber nach 2 Minuten abgebrochen werden würden?

Es wird ja grundsätzlich empfohlen, die Tasks nicht länger als fünf Minuten laufen zu lassen.

Muss ich (sicherheitshalber, falls so ein Task auch mal noch länger dauert), die Crons so angeben?

*/5 * * * * cd /pfad && php7.2 bin/console scheduled-task:run --time-limit=3600
*/5 * * * * cd /pfad && php7.2 bin/console messenger:consume --time-limit=3600

Sorgt das nicht dafür, das wahnsinnig viele Crongs gleichzeitig laufen, wenn jeder davon eine Stunde lang aktiv ist? Wenn ich die Crons auf minütliche Ausführung setze (nicht die Scheduled Tasks), startet dann jede Minute die Verarbeitung, die eine Stunde lang läuft, egal ob das nötig ist, oder nicht?

Danke & Gruß!

Die Jobs sollten tatsächlich nicht so lange laufen, weil sie enorm RAM fressen. Ist mir schleierhaft, warum das so läut, aber das ist tatsächlich aktuell ein Problem.

Kann der Produktimport nicht häppchenweise durchgeführt werden? Also einmal Daten laden und dann abarbeiten. Solange noch Daten abzuarbeiten sind, werden keine neuen geladen. Sobald alle Daten als verarbeitet erkannt werden, wieder von vorne beginnen.

1 „Gefällt mir“

@csrn schrieb:

Die Jobs sollten tatsächlich nicht so lange laufen, weil sie enorm RAM fressen. Ist mir schleierhaft, warum das so läut, aber das ist tatsächlich aktuell ein Problem.

Kann der Produktimport nicht häppchenweise durchgeführt werden? Also einmal Daten laden und dann abarbeiten. Solange noch Daten abzuarbeiten sind, werden keine neuen geladen. Sobald alle Daten als verarbeitet erkannt werden, wieder von vorne beginnen.

Danke für die Info.

Die gesamten prozesse umzubauen (es geht leider nicht nur um einen Produktimport) ist natürlich sehr ärgerlich. Gibt es hier irgendeine offizielle Begründung von Shopware? Kann jemand mehr dazu sagen? Es ist schon ein Problem, wenn ein Shopsystem keine Tasks durchführen kann, die auch mal eine oder zwei Stunden im Hintergrund laufen müssten…

Das Konzept ist dafür nicht ausgelegt. Die Scheduled Tasks sind bloß Nachrichten in der Queue. Du solltest sie auch so verwenden. D.h du schreibst pro x Artikel eine Nachricht mit den Daten. Der Handler bearbeitet dann diese Nachricht.

Diesen Prozess kannst du dann auf x Prozesse laufen lassen. Dadurch bist du auch vieel schneller durch mit den Import

1 „Gefällt mir“

Danke, dann habe ich das wohl nicht ganz richtig erfasst.

Ich schaue es mir an und baue die Prozesse an (oder im schlimmsten Falle wird der bereits vorhandene Command per Crontab aufgerufen).