ich wusste zB gar nicht, dass es einen Unterschied gibt… ich dachte ein Scheduled Task ist ein Cron.
Ich brauche bei dem Scheduled Task halt gewisse über die services.xml injizierte Container und Klassen, zB. die PluginConfig oder einen Logger.
Das kann ich über die CLI ja nicht oder? Ich kann über die CLI ja auch nicht verschiedene Methoden in Klassen triggern oder…? CLI bin ich nicht so fit…
In SW5 hab ich über einen Hostingserver-Cron einfach eine .sh-Datei getriggert, welche dann ihrerseits sw:cron:run ausgeführt hat… aber dafür muss man halt auch die Crons als Plugin im System registrieren mit Klassen, Interval und allem… also in SW6 ein „Scheduled Task“ - Oder nicht?
wie läuft das also nun in SW6?
Außerdem werden die Scheduled Tasks ja in der Shopware Doku als Crons verkauft. Ist das also falsch?
Quite often one might want to run any type of code on a regular basis, e.g. to clean up very old entries every once in a while, automatically. Formerly known as „Cronjobs“, Shopware 6 supports a ScheduledTask for this.
Die Scheduled Tasks sind das neue Konzept in SW6. Heißt aber nicht, dass sie 1:1 das gleiche sind wie Cronjobs. Es ist damit möglich wiederkehrende Aufgaben anzulegen und vom Shop abarbeiten zu lassen. Allerdings wirfst du die Tasks nur in eine Warteschlange die dann vom Shop abgearbeitet wird. Für zeitgesteuerte Aktionen die zum einen bestimmten Zeitpunkt passieren sollen, ist das nicht das richtige. Je nach Setting wird die Warteschlange durch Admin Aktivität oder halt Prozess auf dem Server abgearbeitet. Wann dein Task dran kommt, entscheidet sich halt auf Basis der Positionen in der Warteschlange. Wann der Task in die Warteschlange gelegt wird, entscheidet dein Plugin, dass passiert nicht automatisch. Also müsstest du sicherstellen, dass es einmal täglich reingelegt wird, wann die Abarbeitung erfolgt, ist dann aber nicht zugesichert.
Das macht für Tasks wie einen Index Aufbau Sinn und auch für Importe die eben nicht Zeit relevant sind. Für zeitkritische Dinge die zu einem ganz bestimmten Zeitpunkt erfolgen sollen, ist das nicht die richtige Lösung. Eher eine Lösung für Hintergrundprozesse.
Der Cron Handler in SW5 war ja auch nichts weiter als eine zusätzliche Layer zum Server Cron. Das hätte man auch ohne Probleme alles auf dem Server direkt abbilden können. Ob du jetzt den Cron per Konsole aufrufst oder einen anderen Befehl spielt ja keine Rolle.
okay, also kein Scheduled Task, richtig? Ich will den Prozess täglich um 02:00 ausführen.
Wie leg ich meinen Prozess in PHP dann richtig an? Wie gesagt, ich muss über services.xml gewisse Dinge injizieren…
und wie triggere ich dann den Prozess?
/**
* @param SystemConfigService $config
* @param LoggerInterface $logger
*/
public function __construct(SystemConfigService $config, LoggerInterface $logger)
{
$this->config = $config;
$this->logger = $logger;
}
/**
* import function
*/
public function import()
{
// do stuff
}
wie kann ich also über die CLI meinen Konstruktor mit Daten versorgen und dann die import() antriggern, welche wiederum auf die vom Konstruktor gesetzten Daten zugreift?
wie immer bei SW6: Die Doku lässt zu wünschen übrig, denn davon was du sagst, steht da irgendwie gar nix…
außerdem habe ich noch andere Prozesse, die zwingend regelmäßig alle 10min gestartet werden müssen.