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:
- 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.
- 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.
- 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.
- Ich muss die Cronjobs nicht einzeln starten bzw. einrichten, sondern kann sowas wie einen “Master-Cronjob” einrichten.
- Um die Cronjobs zu starten stehen mir im wesentlichen die folgenden Möglichkeiten zur Verfügung
- Ich starte den Cronjob über eine im Browser eingegebene Url: https://meinShop/backend/cron (Doku)
- Ich verbinde mich via SSH mit dem Server und starte den Cronjob per Befehl (Doku)
- 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:
- 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?
- 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?
- Zu 1. und 2. stellt sich mir die Frage: Hier werden nur die in den Grundeinstellungen als “aktiv” markierten Cronjobs ausgeführt, richtig?
- 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:
- 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?
- 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:
- 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?
- Wenn es wie unter 1. beschrieben ist - wie oft muss dann dieser “Master-Cronjob” gestartet werden?
- 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
- 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?
- 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?
- Ist es korrekt die Parameter für die “SW-Tools”… also “sw:cron:run” so direkt dahinter zu schreiben? Ist das syntaktisch korrekt?
- 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