Scheduled Tasks und Message Queue ohne CLI-Worker - kostenloses Plugin

Hallo zusammen,

ich bin seit Shopware 5 dabei. Dort war es einfach: Ein Cron-Dienst hat /backend/cron aufgerufen, und alles lief. In Shopware 6 braucht man dafür CLI-Worker, also scheduled-task:run und messenger:consume dauerhaft im Hintergrund, am besten mit Supervisor. Das ist aufwendig und geht nicht auf jedem Hosting. Der Admin-Worker als Ersatz arbeitet nur, solange jemand in der Administration angemeldet ist.

Darum habe ich ein kleines Plugin geschrieben, das es wieder so einfach macht wie früher. Es stellt eine geheime Adresse bereit. Ruft ein Cron-Dienst sie zum Beispiel alle 5 Minuten auf, plant Shopware die fälligen Scheduled Tasks ein und arbeitet die Message Queue ab. Solange die Aufrufe kommen, schaltet das Plugin den Admin-Worker ab. Bleiben sie aus, ist er nach 15 Minuten von selbst wieder an.

  • kostenlos, MIT-Lizenz
  • Shopware 6.5 bis 6.7 (getestet mit 6.6 und 6.7)
  • funktioniert mit jedem Cron-Dienst und jedem Hoster-Cron, der eine Adresse aufrufen kann

Damit es klar ist: Das Plugin ist von mir, ich betreibe Cronjob.de. Mit Cronjob.de ist es per Verbindungslink in der Plugin-Konfiguration mit einem Klick eingerichtet, und der 5-Minuten-Takt ist kostenlos. Jeder andere Dienst geht aber genauso.

Download und Beschreibung: Shopware 6 Cronjob ohne CLI-Worker – kostenloses Plugin

Ich freue mich über Rückmeldungen, vor allem wenn etwas nicht klappt.

Joscha

uuuupppssssssssssssssssssss sorry

Moin @Joscha_Schultze,

nur der Vollständigkeit halber: es ist auch so möglich einen Cronjob zu nutzen. Mit supervisor oder systemd ist es natürlich empfohlen als dauerhafter Worker im Hintergrund. Es funktioniert aber auch mit einem Cronjob. Problematischer bei Hostern, welche eventuell nur Cronjobs mit wget oder curl erlauben. Genau dafür kann das Plugin vermutlich vielen bei der Einrichtung helfen :slight_smile:

Grüße
Matthias

Moin Matthias,

danke für die Ergänzung, da hast du völlig recht. Wer per Cron die Konsole aufrufen darf, kommt auch ohne Supervisor aus, etwa mit zwei Einträgen jede Minute:

php bin/console scheduled-task:run --time-limit=60
php bin/console messenger:consume async low_priority --time-limit=60

Wenn der Hoster das hergibt, ist das der saubere Weg.

Das Plugin ist genau für den anderen Fall gedacht: Hoster, bei denen ein Cronjob nur eine Adresse per wget oder curl aufrufen kann oder bei denen es gar keinen Cron gibt. Dann erledigt ein Aufruf der Plugin-Adresse dasselbe, mit Zeitlimit und einer Sperre gegen doppelte Läufe.

Grüße
Joscha