Der Cronjob ist eine Steuerung von Unix Betriebssystemen, um wiederkehrende Aufgaben automatisch zu einer bestimmten Zeit oder in Intervallen auszuführen. Shopware besitzt eine Reihe von Aufgaben, die regelmäßig ausgeführt werden können.
Dazu gehört unter anderem die Prüfung des Lagerbestands, um den Shopbetreiber auf Bestandsengpässe hinzuweisen, das Verschicken von Geburtstagsgrüßen oder Newsletter an die Kunden und Geschäftspartner. Shopware bietet dazu zwei verschiedene Grund-Cronjobs, die Du einzeln oder zusammen zu gleichen oder unterschiedlichen Zeiten / Intervallen ansprechen kannst. In der aktuellen Version liegt der Unterschied im Controller, den Du im Verlauf leicht erkennen wirst.
Grundsätzlich ist Shopware noch nicht für die Verwendung von Cron-Funktionen eingerichtet. Die notwendigen Plugins sind nicht mit der Installation aktiviert. Wenn Du die Cron-Funktionalitäten verwenden möchtest, so installiere nun die erforderlichen Komponenten.
Im Plugin-Manager ist es zwingend erforderlich, alle notwendigen Plugins zu installieren und zu aktivieren, um die entsprechenden Cronjobs nutzen zu können. Nachfolgend eine Auflisting aller Cron-Plugins und den zugehörigen Cronjobs, die durch das Installieren der Plugins nutzbar werden:
Cron:
CronBirthday:
CronRating:
CronStock:
CronRefresh:
Bitte beachte dabei, je mehr Du an zusätzlichen Cron-Aufgaben aktivierst, umso länger dauert auch die Abarbeitung. Das wiederrum führt dazu, dass gerade beim Cron Aufruf per Browser u. U. nicht alles abgearbeitet werden kann oder der Seitenaufruf sehr lange dauert.
Grundvoraussetzung für die Benutzung aller Shopware-Cronjobs ist das installierte und aktivierte Plugin "Cron".
Einige dieser aufgeführten Cronjobs werden nur im Zusammenhang mit dem Plugin CronRefresh ausgeführt.
Mit Hilfe der Cron-Sicherheit kannst Du die Ausführung der Cronjobs auf eine bestimmte IP beschränken, nur ausführen, wenn ein User im Backend eingeloggt ist oder mit einem Key versehen, damit nicht jeder die Ausführung anstoßen kann. Die Einstellungen findest Du in der Konfiguration des Plugin Cron:
Es ist nicht möglich, mehrere Filter miteinander zu kombinieren, da die Sicherheitsabfrage nicht auf alle Felder prüft, sondern die Anfrage passieren lässt, wenn EINE der Vorgaben erfüllt ist!
Da gibt es mehrere Möglichkeiten, je nach Hoster kannst du eventuell nicht alle davon nutzen, setze Dich daher im Zweifel mit Deinem Hoster in Verbindung.
Um den Cronjob zu testen oder unter Windows-Umgebungen per Aufgabenplanung regelmäßig auszuführen, rufst du folgende URL im Browser auf:
// Aufruf aller Crons AUSSER Newsletter
http://www.meinshop.de/backend/cron
// Aufruf des Newsletter-Cronjobs
http://www.meinshop.de/backend/Newsletter/cron
Die Ausführung erfolgt dann direkt und das Ergebnis ist im Browser als Text zu lesen. Bitte beachte, dass es einige Cronjobs gibt, die evtl. über die erlaubte Verbindungszeit oder die erlaubte Script-Laufzeit hinauslaufen. In solchen Fällen kannst Du die Cronjob-Aufgaben reduzieren, der Hoster/Provider die Ausführungszeit erhöhen oder der Cronjob muss per Shell/Konsole ausgeführt werden. Alternativ kannst Du Deine Cronjobs auch so anordnen, dass alle eine unterscheidliche Ausführungszeit besitzen, also pro Aufruf immer nur wenige Cronjobs ausgeführt werden, um Timeouts zu verhindern.
Innerhalb der Shell gibt es keine Begrenzungen was die Script-Laufzeit betrifft. Da hierbei auch keine Verbindung per Browser benötigt wird, können die Cronjobs idealerweise per Shell gestartet werden. Schau in der Verwaltungsoberfläche Deines Hosters, ob Du Shell-Zugriff hast, Dein Provider hilft Dir gegebenenfalls beim Einrichten weiter.
Um Cronjobs per Shell zu starten, kannst Du wie folgt vorgehen (stelle aber sicher, dass Du Dich in der Shell Sitzung bereits im Shopware Verzeichnis befindest!):
Klassische Methode: Diese Methode ist veraltet und wird nicht mehr empfohlen. Bitte verwende wenn möglich unsere CLI Tools.
// direkte Ausführung im Shopware Verzeichnis:
php shopware.php /backend/cron
// (intelligenter) Newsletter
cd /pfad/zumShop && php shopware.php /backend/Newsletter/cron
Empfohlene Methode über die SW-Tools:
// Ausführen aller geplanten Cronjobs, falls fällig
php bin/console sw:cron:run
// Ausführen eines Cronjobs via Action-Name:
php bin/console sw:cron:run ACTION-NAME
// Forcierter (erzwungener) Aufruf des Cronjobs:
php bin/console sw:cron:run ACTION-NAME -f
Beachte, dass sich "ACTION-NAME" nach der ersten Ausführung ändern kann, der Aufruf ist aber dennoch gültig. Es genügt den Action-Name aufzurufen. (z.B. Shopware_CronJob_Clearing > Hier ist "Clearing" der Action-Name). Das Aufrufen von Cronjobs per ACTION-NAME umgeht die "Aktiv"-Einstellung im Backend. Wenn Du also einen inaktiven Cronjob ausführen willst, so wird dieser auch ausgeführt!
Wenn Du Cronjobs via Shell ausführst, achte unbedingt darauf, dass der ausführende Benutzer mit dem der Shopware-Installation übereinstimmt, da es sonst zu Problemen mit Dateirechten kommen kann.
Die Einrichtung der Cronjobs ist Sache des Hostings, da ausschließlich hier der regelmäßige Aufruf konfiguriert werden kann. Falls Du hier Fragen hast, kontaktiere bitte Deinen Hoster.
Wir empfehlen, eine Einstellung zu wählen, die die Cronjobs alle 10-15 Minuten ausführt. Um herauszufinden, welcher PHP-Interpreter verwendet wird, kannst Du auf der Kommandozeile which php5 eingeben.
Bei einigen Hostern (z.B. Host-Europe) kannst Du den Cronjob so nicht aufrufen, hier legst Du eine Datei (z.B. cron.php) in das Root-Verzeichnis und verwendest eines der folgenden Beispiele.
Den notwendigen Interpreter-Aufruf (#!/../../php5) erfährst Du auch bei Deinem Provider.
#!/usr/bin/php
<?php
echo file_get_contents ('http://www.meinshop.de/backend/cron');
*/15 * * * * wget -q http://www.meinshop.de/backend/cron
Speichere die Datei im Format »ASCII« ab. Setze die Dateirechte der Datei auf 755.
* * * * * Befehl der ausgeführt werden soll
- - - - -
| | | | |
| | | | +-- Wochentag (0 - 7) (Sonntag ist 0 und 7)
| | | +------ Monat (1 - 12)
| | +---------- Tag (1 - 31)
| +------------- Stunde (0 - 23)
+----------------- Minute (0 - 59)
Es gibt einige Prozesse in Shopware, die nicht über das Cronjob Plugin ausgeführt werden können. Diese können jedoch über die CLI Tools als Cronjob angelegt haben. Hierfür gehst Du genauso vor wie im Punkt "Cron per SHELL/Konsole ausführen" und fügst die gewünschten Kommandos hinzu.
Dieser Befehl ist besonders für die Verwendung als Cronjob hilfreich, da hierdurch die Ladezeiten des Shops nach Leeren des Caches deutlich verringert werden. Über den regulären Shopware Cronjob ist dieser Prozess nicht abgedeckt, weshalb dies als separater Cronjob in der Serverkonsole hinterlegt werden muss. Es ist empfehlenswert diesen Cronjob nach Löschen des HTTP Caches durchzuführen.
php bin/console sw:warm:http:cache
Weitere Befehle findest du in unserem Shopware CLI Artikel.
Bei Unix / Linux-Servern hat der Cronjob (also die Datei für den Cronjob) in der Regel nach dem Erstellen noch keine ausreichenden Rechte zum Ausführen. Setze daher die Rechte auf mindestens 755.
Normalerweise funktioniert die »mail()«-Funktion auf allen Linux-basierenden Systemen direkt ohne weitere Konfiguration. Unter Windows-Servern gibt es diese Funktion nicht. Daher müssen bei Windows-Servern speziell noch weitere Schritte vorgenommen werden.
Richte im Backend unter Einstellungen > Grundeinstellungen > System > Mailer einen Mailserver ein, den Du ansprechen kannst. Als Methode trägst Du "smtp" ein. Ab jetzt sucht der Shopware-Server nach dem unter SMTP Host eingetragenen Server. Mit dem SMTP-Username und dem SMTP password authentifizierst Du Dich dort. Frage bei Deinem Mail-Provider nach, ob dort eine Plain, Login oder die verschlüsselte CramMD5-Methode zur Übertragung der Zugangsdaten erforderlich ist.