Wie funtionieren die Cronjobs

Moin allerseits,

ich habe noch nicht wirklich durchdrungen wie die Cronjobs bei Shopware funtionieren. Ich beschäftige mich damit, weil ich gerade mal ein bisschen die Benachrichtigungsfunktion für nicht verfügbare Artikel getestet habe (ein anderes Thema ist, dass ich die Benachrichtigungsfunktion gerne ohne Double-Opt-In hätte).

I Allgemein

Also… folgendes glaube ich verstanden zu haben: 

  1. Es gibt diverse Cronjobs die verschiedene Funktionen ausführen (Ich nenne sie teilw. Funktions-Cronjobs). Eine Auflistung dieser Cronjobs finde ich in den Grundeinstellungen unter System/Cronjobs.
     
  2. In den Grundeinstellungen kann ich die unter 1. genannten Cronjobs konfigurieren. Insb. kann ich sie dort aktivieren/deaktivieren und einen Intervall, sowie die letzte und nächste Ausführung einsehen bzw. einstellen.
     
  3. Damit die unter 1. genannten Cronjobs ausgeführt werden ist es notwendig diverse Plugins zu aktivieren. Eine Übersicht der zu aktivierenden Plugins finde ich hier: Doku. Für die Nutzung des Cronjobs “eMail-Benachrichtigung” muss ich bspw. das Plugin “Cron” aktivieren.
     
  4. Ich muss die Cronjobs nicht einzeln starten bzw. einrichten, sondern kann sowas wie einen “Master-Cronjob” einrichten.
     
  5. Um die Cronjobs zu starten stehen mir im wesentlichen die folgenden Möglichkeiten zur Verfügung
     
  6. Ich starte den Cronjob über eine im Browser eingegebene Url: https://meinShop/backend/cron (Doku)
  7. Ich verbinde mich via SSH mit dem Server und starte den Cronjob per Befehl (Doku)
  8. Ich richte bei meinem Hoster einen Cronjob ein. Dieser läuft regelmäßig und startet meine Conjobs. (Doku)

II Cronjob-Steuerung

Ich habe noch nicht ganz verstanden wie die Cronjob-Steuerung nun funktioniert. Ich möchte bspw. die “eMail-Benachrichtigung” haben. Daher habe ich das Plugin “Cron” aktiviert. In der Doku steht, dass man zum Starten der Cronjobs entweder /backend/cron, für die Newsletter /backend/newsletter/cron oder die “SW-Tools” per bin/console … aufrufen muss. Das zeigt mir erstmal “wie” ich die Cronjobs starte, aber noch nicht genau “was” ich starte. Für mich ist nicht klar welcher Aufruf genau was bewirkt!

Es stellen sich hier Fragen:

  1. Beim Aufruf über Browser oder Shell mit “klassicher Methode” rufe ich im Prinzip ein Verzeichnis auf. Nämlich “backend/cron”. Bei diesem “Verzeichnisaufruf” muss aber für die Newsletter-Funktion ein separater Aufruf durchgeführt werden. Mal abgesehen davon, dass die Newsletter-Funktion weder in den Grundeinstellungen noch in der Doku als Cronjob aufgeführt wird, stellt sich mir hier die Frage, ob der gesonderte Aufruf einzig und allein für die Newsletter-Funktion notwendig ist oder ob das auch für diejenigen Funtions-Cronjobs gilt für die ein anderes Plugin als das “Cron”-Plugin Voraussetzung ist?
     
  2. Beim Aufruf über Shell mittels “SW-Tools” übergebe ich Parameter (“sw:cron:run”) an “bin/console”  - “console” ist eine PHP-Datei, die dann also die Parameter erhält. Das Verwenden dieser Parameter wird von Shopware also als SW-Tools bezeichnet. Okay. Davon ausgehend, dass ich den Paramter “ACTION-NAME” nicht übergebe habe ich folgende Fragen: Werden hier denn ALLE Cronjobs ausgeführt? Oder bildet auch hier der Newsletter die Ausnahme? Werden hier auch diejenigen Cronjobs ausgeführt für die ein anderes als das “Cron”-Plugin benötigt wird?
     
  3. Zu 1. und 2. stellt sich mir die Frage: Hier werden nur die in den Grundeinstellungen als “aktiv” markierten Cronjobs ausgeführt, richtig?
     
  4. Völlig unklar ist mir der Zusammenhang zur letzten und nächsten Ausführung in den Grundeinstellungen. Beide Felder sind editierbar. Es stellen sich mir also folgende Fragen:
     
  5. Ich war davon ausgegangen, dass mir die “letzte Ausführung” anzeigt wann die letzte Ausführung war und damit für mich informativen Charakter hat. Da das Feld editierbar ist frage ich mich: Hat es für den Cronjob irgendeine Bedeutung was unter “letzte Ausführung” angegeben ist? 
     
  6. Das Feld “nächste Ausführung” ist auch editiertbar. Auch hier ist unklar inwiefern dieses Feld vom gestarten Cronjob berücksichtig wird. Ich hätte jetzt erwartet, dass bei einem direkten Starten des Funtions-Cronjobs (bspw. per ACTION-NAME “notification” die eMail-Benachrichtigung) dieses Feld ignoriert wird. Aber beim Starten des “Master-Jobs”, der seinerseits die einzelnen Funktions-Cronjobs startet, dieses Feld durchaus berücksichtigt wird und der Funktions-Cronjob nur ausgeführt wird, wenn der Zeitpunkt der unter “nächste Ausführung” angegeben ist auch demnächst ansteht (bzw. noch nicht vergangen ist). Ich hätte dann erwartet, dass der Funktions-Cronjob nach der Ausführung den Wert für “letzte Ausführung” setzt und auf diesen Wert den “Intervall” rechnet und somit den neuen Wert für die “nächste Ausführung” berechnet. Das scheint aber nicht der Fall zu sein. Wie also werden “letzte Ausführung” (und Intervall) berücksichtigt und muss ich dementsprechend eine Konfiguration vornehmen?

III Regelmäßige Ausführung beim Hoster

Zur Einrichtung beim Hoster habe ich auch Fragen:

  1. Ich bin davon ausgegangen, dass ich sowas wie einen “Master-Cronjob” starte, der dann die Funktions-Cronjobs im konfigurierten Intervall aufruft. Ich habe auch Beiträge gelesen, die genau das bestätigen. Soll das so sein?
     
  2. Wenn es wie unter 1. beschrieben ist - wie oft muss dann dieser “Master-Cronjob” gestartet werden?
     
  3. Wenn es nicht so ist wie unter 1. beschrieben, dann müsste ich ja den Intervall selber steuern indem ich den Cronjob beim Hoster entsprechend anlege. Dann verstehe ich den Sinn der Konfiguration in den Grundeinstellungen nicht ganz. Kann mir das dann bitte einmal jemand verdeutlichen?

IV Cronjob Einrichtung

Ich habe Zweifel, dass sowas wie ein “Master-Cronjob” alle Cronjobs mehr als einmal startet. Ich konnte die Cronjobs erfolgreich mittels SSH “SW-Tools” Befehl starten. Sie sind aber nur einmalig gelaufen. Daher bin ich weiter oben auch auf “letzte Ausführung/nächste Ausführung” eingegangen.

Mein beim Hoster konfigurierter Cronjob funktioniert nicht (diese Fragen gehen auch an meinen Hoster) - mein derzeitiges Kommando schaut so aus:

cd /home/www/www.domain.de/shopware/bin; /usr/bin/php php /home/www/www.domain.de/shopware/bin/console sw:cron:run 

  1. Den Wechsel in das Verzeichnis habe ich aus Beispielen vom Hoster übernommen. Seltsam fand ich dann den vollständigen Pfad zur “console”. Ist das cd Statement üblich und notwendig?
  2. Die Angabe zum Interpreter habe ich vom Hoster (aus den Beispielen und in der Kurzanleitung beim Eingabe-Formular). Wenn ich davon ausgehe, dass diese Angabe korrekt ist und ich den Interpreter über den angegebenen Pfad erreiche, dann müsste das Verzeichnis zur “console” auch korrekt sein, da /home und /usr im selben Verzeichnis liegen. Das ist dann quasi das Root-Verzeichnis in dem ich auf oberste Ebene gelange, wenn ich bpsw. per FTP auf den Server gehe. Unter der Voraussetzung müsste doch die Verzeichnis-Angabe zur “console” korrekt sein, oder?
  3. Ist es korrekt die Parameter für die “SW-Tools”… also “sw:cron:run” so direkt dahinter zu schreiben? Ist das syntaktisch korrekt?
  4. Hat jemand einen Plan wie ich mir beim Hoster (Adminpanel bei Webhostone) anschauen kann, ob der Cronjob gelaufen ist bzw. wo ich etwaige Fehler finde? Ich kann mir ein Error, sowie Access Log ansehen, da ist aber nichts vom Cronjob zu finden.

Bitte entschuldigt meine umfangreichen Ausführungen. Herzlichen Dank für Eure Aufmerksamkeit und Hilfe :slight_smile:

 

Ich glaube, du wirst kaum auf alle deine Fragen eine Antwort erhalten. Vieles kannst du durch einfaches ausprobieren auch eben selbst herausfinden. Das sollte immer die erste Vorgehensweise sein.

Ein Cronjob, wie der Name schon sagt, sollte als Cronjob auf dem Server eingerichtet werden. Das ist eine Standard Linux-Funktion. Dies erfolgt in der Regel über die Serverkonsole des Hosters und ist grundlegend bei jedem Hoster unterschiedlich. Die Einrichtung solltest du daher mit diesem Absprechen. Der Newsletter ist ein separater Aufruf, weil dieser mehrfach ausgeführt werden muss und über eine längere Zeit laufen kann. Das würde sonst die anderen Crons blockieren. Bei bspw. 10.000 Empfängern und bei 500 Mails pro Batch, muss der Cronjob halt öfter aufgerufen werden. 

Ein paar Cronjobs brauchen zusätzliche Plugins, ja. Wenn die nicht installiert sind, wird der Cron zwar ausgeführt, aber es passiert einfach nichts, da die Logik die dieser Cron ausführen soll, nicht existiert. Das ist also völlig egal ob die aktiv oder inaktiv sind.

Die vorherige Ausführung wird benötigt umd die nächste Ausführung zu berechnen. Wenn du im Backend einstellst, dass der Cron jede Stunde ausgeführt wird, wird auf letzte Ausführung immer +1h gerechnet. Anhand der nächsten Ausführung wird entschieden ob der Cron jetzt ausgeführt werden muss, wenn der Cron-Server serverseitig aufgerufen wird.

Den Rest solltest du einfach mal durchtesten.

 

Vielen Dank für die Info, hat mir schon ein Stück weitergeholfen!

Also grundsätzlich gibt es sozusagen cron und newsletter. Und was durch Cron gestartet wird hängt von den Plug-Ins, dem aktiv-Status und den Zeiten ab. 
Außerdem muss Cron durch den Hoster-Cronjob mehrfach gestartet werden. Es wird also durch ein einmaliges Starten nicht bewirkt, dass ein CronJob (bspw. eMail-Benachrichtigung) dem eingestellten Intervall entsprechend automatisch läuft. Das hatte ich angenommen und auch so woanders gelesen.

Die Jobs laufen an, wenn die „nächste Ausführung“-Zeit erreicht ist oder in der Vergangenheit liegt. Nach der Ausführung wird „letzte Ausführung“ entsprechend der letzten Ausführung gesetzt. Die „nächste Ausführung“ ergibt sich aus „nächste Ausführung“ + Intervall. Der Intervall wird also nicht auf die „letzte Ausführung“ drauf gerechnet.

Tja… mit dem Ausprobieren kann man nicht alles rausfinden. Und zwar eben dann, wenn etwas nicht korrekt arbeitet oder man einen Fehler macht. Wie ich zum Beispiel: Ich habe mich eben dumm und dämlich gesucht und darüber geärgert, dass die eMail-Benachrichtigung nicht läuft, obwohl der Job ja wohl angelaufen ist… tja… hatte vergessen auch den Bestand für den Testartikel zu erhöhen *patsch*

Jetzt muss ich nur noch rausfinden warum mein Cronjob beim Hoster nicht anläuft.

Moin,

gibt es irgendwo eine Auflistung dessen was die CronJobs jeweils machen?

Bzw. welche essentiell/empfohlen usw sind?

Danke!

Hallo,

schau mal hier
Shopware 5 - Einstellungen - System: Cronjobs

Viele Grüße

 I’ll be sure to keep an eye on this thread. Looking for the same issue. Bumped into your thread. Thanks for creating it. Looking forward for solution.
    

  Thanks for the information keep sharing such informative post keep suggesting such post.

 

@Metaphore schrieb: upsers

Vielen Dank für die Info, hat mir schon ein Stück weitergeholfen!

Also grundsätzlich gibt es sozusagen cron und newsletter. Und was durch Cron gestartet wird hängt von den Plug-Ins, dem aktiv-Status und den Zeiten ab. 
Außerdem muss Cron durch den Hoster-Cronjob mehrfach gestartet werden. Es wird also durch ein einmaliges Starten nicht bewirkt, dass ein CronJob (bspw. eMail-Benachrichtigung) dem eingestellten Intervall entsprechend automatisch läuft. Das hatte ich angenommen und auch so woanders gelesen.

Die Jobs laufen an, wenn die „nächste Ausführung“-Zeit erreicht ist oder in der Vergangenheit liegt. Nach der Ausführung wird „letzte Ausführung“ entsprechend der letzten Ausführung gesetzt. Die „nächste Ausführung“ ergibt sich aus „nächste Ausführung“ + Intervall. Der Intervall wird also nicht auf die „letzte Ausführung“ drauf gerechnet.

Tja… mit dem Ausprobieren kann man nicht alles rausfinden. Und zwar eben dann, wenn etwas nicht korrekt arbeitet oder man einen Fehler macht. Wie ich zum Beispiel: Ich habe mich eben dumm und dämlich gesucht und darüber geärgert, dass die eMail-Benachrichtigung nicht läuft, obwohl der Job ja wohl angelaufen ist… tja… hatte vergessen auch den Bestand für den Testartikel zu erhöhen *patsch*

Jetzt muss ich nur noch rausfinden warum mein Cronjob beim Hoster nicht anläuft.

 

Hallo,

genau - Du kannst serverseitig z.B. den Cron alle 5 Minuten oder 1x pro Stunde “anschubsen” - was dann tatsächlich abgearbeitet wird, hängt von den Cron-Einstellungen in Deinem Backend ab. Gleiches gilt für den Newsletter Cron - wann dieser ausgeführt wird, hängt hier auch vom hinterlegten Versandzeitpunkt ab. 

Den Cron kannst Du auch durch Aufruf der URL https://www.deinshop.de/backend/cron bzw. https://www.deinshop.de/backend/Newsletter/cron im Browser “anschubsen”.

Viele Grüße

Habe genau die gleichen Probleme, danke fürs ansprechen!