# Cronjob einrichten... ich verstehe es einfach nicht

**URL:** <https://forum.shopware.com/t/cronjob-einrichten-ich-verstehe-es-einfach-nicht/105768>\
**Category:** Shopware 6 (German)\
**Created:** [6. November 2024 um 13:28 UTC](https://forum.shopware.com/t/cronjob-einrichten-ich-verstehe-es-einfach-nicht/105768 "2024-11-06T13:28:25Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![brettvormkopp](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/brettvormkopp/32/7788_2.png) [@brettvormkopp](https://forum.shopware.com/u/brettvormkopp)\
**Post date:** [6. November 2024 um 13:28 UTC](https://forum.shopware.com/t/cronjob-einrichten-ich-verstehe-es-einfach-nicht/105768/1 "2024-11-06T13:28:25Z")

</div>

Ich habe jetzt schon viele Anleitungen gelesen, aber ich habe das Gefühl ich bin jetzt dümmer.

Der Admin-Worker ist ausgeschaltet in ./config/packages/z-shopware.yaml

```auto
shopware:
    admin_worker:
       enable_admin_worker: false

```

Dann lege ich eine Bash-Script Datei an:

```auto
#!/bin/bash
env -i /usr/bin/php83 -f ./../shop/bin/console messenger:consume failed async low_priority --time-limit=300 --memory-limit=512M

env -i /usr/bin/php83 -f ./../shop/bin/console scheduled-task:run --time-limit=300 --memory-limit=512M

```

Das blockiert mir dann meine Console für 5 Minuten ich erhalte diese Ausgabe:

```auto
 [OK] Consuming messages from transports "failed, async, low_priority".

 // The worker will automatically exit once it has exceeded 512M of memory, been running for 300s or received a stop
 // signal via the messenger:stop-workers command.

 // Quit the worker with CONTROL-C.

Scheduled task runner stopped due to time limit of 300s reached

```

Welchen Teil habe ich hier übersehen? Wo stelle ich ein wann der Job ausgeführt werden soll?

Wie lasse ich spezielle Cronjobs laufen? z.B.

```auto
php bin/console product-export:generate 01927c23ec3570e1b8784c2a4d551bfc 0192dc4331ef729a89a28cba8c136e62

```

Alles in eine PHP-Datei schmeissen und von extern(all-inkl) aufrufen lassen?

Danke und Gruss

---

<div class="post-metadata">

**Author:** ![frip-tech.de](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/frip-tech.de/32/24453_2.png) [@frip-tech.de](https://forum.shopware.com/u/frip-tech.de)\
**Post date:** [6. November 2024 um 13:33 UTC](https://forum.shopware.com/t/cronjob-einrichten-ich-verstehe-es-einfach-nicht/105768/2 "2024-11-06T13:33:15Z")

</div>

Welchen Host nutzt du?

---

<div class="post-metadata">

**Author:** ![brettvormkopp](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/brettvormkopp/32/7788_2.png) [@brettvormkopp](https://forum.shopware.com/u/brettvormkopp)\
**Post date:** [6. November 2024 um 13:36 UTC](https://forum.shopware.com/t/cronjob-einrichten-ich-verstehe-es-einfach-nicht/105768/3 "2024-11-06T13:36:02Z")

</div>

> **[Domains, Webspace, Domain Webhosting, Server-Hosting Provider ALL-INKL](https://all-inkl.com)**
>
> Führender Webhost & Provider für Domains, Homepage-Webspace (Domain-Webhosting) & Server (Server-Hosting, Managed Server). ALL‑INKL - für Retail & Reseller!

Business und ManagedServer

---

<div class="post-metadata">

**Author:** ![R4M](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/r4m/32/9983_2.png) [@R4M](https://forum.shopware.com/u/R4M)\
**Post date:** [6. November 2024 um 14:39 UTC](https://forum.shopware.com/t/cronjob-einrichten-ich-verstehe-es-einfach-nicht/105768/4 "2024-11-06T14:39:53Z")

</div>

Wie benutzen 3 Einträge und das läuft ziemlich gut (bezogen auf SW 6.6.x):

```auto
bin/console messenger:consume async low_priority --time-limit=55 --memory-limit=512M
bin/console scheduled-task:run --time-limit=55 --memory-limit=512M
bin/console messenger:consume failed --time-limit=55 --memory-limit=512M

```

---

<div class="post-metadata">

**Author:** ![area-net-gmbh](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/area-net-gmbh/32/21995_2.png) [@area-net-gmbh](https://forum.shopware.com/u/area-net-gmbh)\
**Post date:** [6. November 2024 um 15:14 UTC](https://forum.shopware.com/t/cronjob-einrichten-ich-verstehe-es-einfach-nicht/105768/5 "2024-11-06T15:14:48Z")

</div>

> **[Anleitungen, Skripte, Sonstiges, per Skript: Shellskripte ausführen](https://all-inkl.com/wichtig/anleitungen/kas/tools/cronjobs/einrichtung_479.html)**
>
> ALL-INKL.COM - Anleitungen, Skripte, Sonstiges, per Skript: Shellskripte ausführen

---

<div class="post-metadata">

**Author:** ![brettvormkopp](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/brettvormkopp/32/7788_2.png) [@brettvormkopp](https://forum.shopware.com/u/brettvormkopp)\
**Post date:** [6. November 2024 um 15:18 UTC](https://forum.shopware.com/t/cronjob-einrichten-ich-verstehe-es-einfach-nicht/105768/6 "2024-11-06T15:18:48Z")

</div>

In welchem Zeitlichen Abstand? 5 min?

---

<div class="post-metadata">

**Author:** ![Max\_Shop](https://avatars.discourse-cdn.com/v4/letter/m/58f4c7/32.png) [@Max\_Shop](https://forum.shopware.com/u/Max_Shop)\
**Post date:** [6. November 2024 um 16:22 UTC](https://forum.shopware.com/t/cronjob-einrichten-ich-verstehe-es-einfach-nicht/105768/7 "2024-11-06T16:22:29Z")

</div>

> [@brettvormkopp](#):
>
> Welchen Teil habe ich hier übersehen? Wo stelle ich ein wann der Job ausgeführt werden soll?

Du hast anscheinend den Unterschied zwischen Befehl und Cronjob verstanden. Ein Befehl wird in der CLI ausgeführt. Ein Cronjob ist ein Programm, dass nach zeitlichen Mustern Befehle ausführt.

Falls du einen eigenen Server hast, kannst du bspw. per crontab -e die Cronjobs für deinen Benutzer öffnen. Solche Rechte hast du bei Managed Servern in der Regel aber nicht, daher gibt es Anleitungen, wie schon hier im Forum verlinkt.

Das --time-limit ist dafür da, dass der Befehl nicht unendlich läuft und nach x Sekunden beendet wird. Je nachdem in welchem Minutentakt der Cronjob den Befehl aufruft, desto niedriger/höher musst du --time-limit setzen. Achte aber darauf, dass --time-limit den Befehl nicht abbricht, sondern ein „Beende die Ausführung am nächstmöglichen Zeitpunkt“ sendet. Daher würde es bei --time-limit=60 und Cronjob jede Minute zu Überschneidungen kommen, was deinen RAM des Servers komplett aufbrauchen kann. Um das zu verhindern gibt es weitere Programme, siehe FAQ.

---

<div class="post-metadata">

**Author:** ![sonic](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/sonic/32/25728_2.png) [@sonic](https://forum.shopware.com/u/sonic)\
**Post date:** [6. November 2024 um 18:22 UTC](https://forum.shopware.com/t/cronjob-einrichten-ich-verstehe-es-einfach-nicht/105768/8 "2024-11-06T18:22:07Z")

</div>

> [@Shopware 6 Cronjob mit All-Inkl?](https://forum.shopware.com/t/shopware-6-cronjob-mit-all-inkl/100063/2):
>
> Du legst Dir zwei php-Dateien in public an. Die eine ruft per CLI die messageque auf, die andere den scheduledtasks. Den Tip gab glaub ich shyim hier. Meine run-scheduledtasks.php: \<?php exec("/usr/bin/php81 /www/htdocs/xxxx/xxx/SW6EA/bin/console scheduled-task:run --time-limit=60 --memory-limit=256M 2\>&1", $out, $result); echo "Returncode: " .$result ."\<br\>"; echo "Ausgabe des Scripts: " ."\<br\>"; echo "\<pre\>"; print\_r($out); ?\> und run-messageque.php \<?php exec("/usr/bin/php81 /www/htdocs…

---

<div class="post-metadata">

**Author:** ![frip-tech.de](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/frip-tech.de/32/24453_2.png) [@frip-tech.de](https://forum.shopware.com/u/frip-tech.de)\
**Post date:** [6. November 2024 um 19:32 UTC](https://forum.shopware.com/t/cronjob-einrichten-ich-verstehe-es-einfach-nicht/105768/9 "2024-11-06T19:32:14Z")

</div>

ok, wenn du es nicht hinkriegst, machen wir es gerade zusammen, geht bei all-inkl. ganz gut.

---

<div class="post-metadata">

**Author:** ![R4M](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/r4m/32/9983_2.png) [@R4M](https://forum.shopware.com/u/R4M)\
**Post date:** [7. November 2024 um 07:08 UTC](https://forum.shopware.com/t/cronjob-einrichten-ich-verstehe-es-einfach-nicht/105768/10 "2024-11-07T07:08:42Z")

</div>

> [@brettvormkopp](#):
>
> In welchem Zeitlichen Abstand? 5 min?

Nein, in Minutentakt. Hört sich zwar brutal an, aber war im umfangreichen Tests die beste Lösung. Auch bei extrem großen Shops.

---

<div class="post-metadata">

**Author:** ![PromoID](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/promoid/32/14015_2.png) [@PromoID](https://forum.shopware.com/u/PromoID)\
**Post date:** [7. November 2024 um 14:22 UTC](https://forum.shopware.com/t/cronjob-einrichten-ich-verstehe-es-einfach-nicht/105768/11 "2024-11-07T14:22:31Z")

</div>

```auto
1. <?php
2. [exec](http://www.php.net/exec)("/usr/bin/php82 /www/htdocs/KUNDE/pfad/zu/shopware/bin/console messenger:consume failed async low_priority --time-limit=55 -vv 2>&1", $out, $result);
3. echo "Returncode: " .$result ."<br>";
4. echo "Ausgabe des Scripts: " ."<br>";
5. echo "<pre>"; [print_r](http://www.php.net/print_r)($out);
6. ?>

```

```auto
1. <?php
2. [exec](http://www.php.net/exec)("/usr/bin/php82 /www/htdocs/KUNDE/pfad/zu/shopware/bin/console scheduled-task:run --time-limit=55 2>&1", $out, $result);
3. echo "Returncode: " .$result ."<br>";
4. echo "Ausgabe des Scripts: " ."<br>";
5. echo "<pre>"; [print_r](http://www.php.net/print_r)($out);
6. ?>

```

Jeweils als PHP Datei abspeichern. Ggf. die PHP Version anpassen.  
Im KAS - \> Tools - \> Cronjobs  
Beide PHP Dateien minütlich abrufen lassen.

---

<div class="post-metadata">

**Author:** ![MichaelH74](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/michaelh74/32/10014_2.png) [@MichaelH74](https://forum.shopware.com/u/MichaelH74)\
**Post date:** [7. November 2024 um 16:37 UTC](https://forum.shopware.com/t/cronjob-einrichten-ich-verstehe-es-einfach-nicht/105768/12 "2024-11-07T16:37:49Z")

</div>

Habe das wie in der eingangs erwähnten Bash am Laufen.  
Nur getrennt in 2 Files:  
messenger\_consume.sh  
und  
scheduled\_task\_run.sh

Die werden dann per Cron alle 5 min. aufgerufen.  
Die Aufrufe sollten sich halt zeitlich nicht überschneiden.

Denke die Lösung ist besser als über PHP public. Denn die kann theoretisch ohne extra Schutz jeder von außen aufrufen. Die Bash Scripte kannst du außerhab der Web root ablegen.

Viele Grüße  
Michael

---

<div class="post-metadata">

**Author:** ![sonic](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/sonic/32/25728_2.png) [@sonic](https://forum.shopware.com/u/sonic)\
**Post date:** [7. November 2024 um 17:07 UTC](https://forum.shopware.com/t/cronjob-einrichten-ich-verstehe-es-einfach-nicht/105768/13 "2024-11-07T17:07:51Z")

</div>

1. bei all inkl gibt es keinen cron für shell
2. kann man den Aufruf durch böse dritte, die den Ort und Namen der Datei ja kennen müssten, durch ein Geheimnis als Parameter schützen.

kann man so aber auch im anderen verlinkten Thema entnehmen.

---

<div class="post-metadata">

**Author:** ![MichaelH74](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/michaelh74/32/10014_2.png) [@MichaelH74](https://forum.shopware.com/u/MichaelH74)\
**Post date:** [7. November 2024 um 18:34 UTC](https://forum.shopware.com/t/cronjob-einrichten-ich-verstehe-es-einfach-nicht/105768/14 "2024-11-07T18:34:56Z")

</div>

OK, wenn man keine andere Wahl hat, dann muss das wohl so.

Gibt sicher ein paar Schutzmechanismen wie z.B. IP Check des Aufrufs oder htaccess, etc.  
Auf einen reinen Namen, der nicht bekannt ist, würde ich mich nicht verlassen.

Nur falls das auch andere lesen, hat man die Möglichkeit über Bash oder direktem CLI call, dann besser immer den Weg wählen als die PHP Lösung.

---

<div class="post-metadata">

**Author:** ![KeinPlanB](https://avatars.discourse-cdn.com/v4/letter/k/7ba0ec/32.png) [@KeinPlanB](https://forum.shopware.com/u/KeinPlanB)\
**Post date:** [25. Februar 2025 um 12:23 UTC](https://forum.shopware.com/t/cronjob-einrichten-ich-verstehe-es-einfach-nicht/105768/15 "2025-02-25T12:23:40Z")

</div>

Bei 5 Minuten lief die Queue schnell voll, bei 1min immer noch langsam.

Spricht was gegen diese Lösung?

1 1,7,13,19 \* \* \* /bin/console messenger:consume async  
59 0,6,12,18 \* \* \* /bin/console messenger:stop-workers  
5 \* \* \* \* /bin/console scheduled-task:run --time-limit=55 --memory-limit=512M

Scheint mir bisher problemlos

---

<div class="post-metadata">

**Author:** ![R4M](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/r4m/32/9983_2.png) [@R4M](https://forum.shopware.com/u/R4M)\
**Post date:** [25. Februar 2025 um 12:33 UTC](https://forum.shopware.com/t/cronjob-einrichten-ich-verstehe-es-einfach-nicht/105768/16 "2025-02-25T12:33:44Z")

</div>

> [@KeinPlanB](#):
>
> Bei 5 Minuten lief die Queue schnell voll, bei 1min immer noch langsam.

In der Shopware Doku stehen Beispiele. Also ICH würde die Cronjobs so nicht einstellen. Schon gar nicht ohne Parameter.

---

<div class="post-metadata">

**Author:** ![Max\_Shop](https://avatars.discourse-cdn.com/v4/letter/m/58f4c7/32.png) [@Max\_Shop](https://forum.shopware.com/u/Max_Shop)\
**Post date:** [25. Februar 2025 um 12:51 UTC](https://forum.shopware.com/t/cronjob-einrichten-ich-verstehe-es-einfach-nicht/105768/17 "2025-02-25T12:51:19Z")

</div>

> [@KeinPlanB](#):
>
> Spricht was gegen diese Lösung?

Mir scheint, dass du nicht wirklich verstehst wie das ganze Funktioniert.

Mit dem Interval \* \* \* \* \* gibst du an, wie häufig der Cronjob ausgeführt werden soll. So jede Minute. Mit --time-limit=55 gibst du an, dass der Befehl 55 Sekunden lang laufen soll.

Somit ergibt sich, dass der Befehl mindestens 55 von 60 Sekunden (90% der Zeit) lang laufen würde.

Was du da als Idee hattest, macht überhaupt kein Sinn.

Falls 90% der Zeit nicht ausreichen, dann benötigst du einen zweiten Worker/Cronjob. Dafür sind dann Cronjobs aber nicht mehr sehr gut geeignet. Das kannst du dann aber alles in der Entwickler Dokumentation nachlesen.

---

<div class="post-metadata">

**Author:** ![KeinPlanB](https://avatars.discourse-cdn.com/v4/letter/k/7ba0ec/32.png) [@KeinPlanB](https://forum.shopware.com/u/KeinPlanB)\
**Post date:** [25. Februar 2025 um 13:18 UTC](https://forum.shopware.com/t/cronjob-einrichten-ich-verstehe-es-einfach-nicht/105768/18 "2025-02-25T13:18:34Z")

</div>

Warum macht das keinen Sinn? Ohne Zeitlimit läuft der asynchron für knapp 6 Stunden und ich habe Null Probleme bisher.

Die Queue bleibt sauber, im Gegensatz zu den 1 und 5 Minuten Intervallen (warum auch immer).

Die 6 Stunden sind ziemlich beliebig, würde mit 1h oder 24h wahrscheinlich auch gehen. Lasttechnisch tut sich in keinem Fall was.

---

<div class="post-metadata">

**Author:** ![Max\_Shop](https://avatars.discourse-cdn.com/v4/letter/m/58f4c7/32.png) [@Max\_Shop](https://forum.shopware.com/u/Max_Shop)\
**Post date:** [25. Februar 2025 um 14:41 UTC](https://forum.shopware.com/t/cronjob-einrichten-ich-verstehe-es-einfach-nicht/105768/19 "2025-02-25T14:41:10Z")

</div>

> [@KeinPlanB](#):
>
> Warum macht das keinen Sinn?

Wenn der Cronjob einen Fehler wirft, was durchaus passieren kann, dann läuft er ggf. für 5 Stunden überhaupt nicht mehr, bis er erneut aufgerufen wird.

---

<div class="post-metadata">

**Author:** ![KeinPlanB](https://avatars.discourse-cdn.com/v4/letter/k/7ba0ec/32.png) [@KeinPlanB](https://forum.shopware.com/u/KeinPlanB)\
**Post date:** [25. Februar 2025 um 14:47 UTC](https://forum.shopware.com/t/cronjob-einrichten-ich-verstehe-es-einfach-nicht/105768/20 "2025-02-25T14:47:14Z")

</div>

Das ist ein Punkt - ist aber noch nicht passiert.

Und bisher hat das langsame Volllaufen der Queue über Wochen noch keine kritischen Fehler verursacht. Im schlimmsten Fall würden ein paar Stunden ein paar Sachen nicht updaten.

Ich beobachte weiter, kann ich immer noch auf eine Stunde umbauen.
