System: Cronjobs

Was ist ein Cronjob?

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.

Konfiguration in Shopware

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.

Notwendige Plugins Installieren und Aktivieren

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:

  • Suche: Baut den Suchindex neu auf (alter Job - abgelöst durch Refresh search index)
  • E-Mail-Benachrichtigung: verschickt Artikelverfügbarkeits-E-Mail an Kunden
  • Topseller Refresh: die Topseller werden neu berechnet
  • Similiar shown article refresh: berechnet Diese Artikel könnten Ihnen gefallen neu
  • Refresh seo index: leert den SEO Cache
  • Refresh search index: leert den Suche Cache
  • HTTP Cache löschen: leert den HTTP Cache
  • Media Garbage Collector: erfasst alle Bilder ohne Zuweisung und verschiebt diese in den Papierkorb des Media Manager.
  • Cancelled baskets cleanup: Löscht abgebrochene Bestellungen, welche älter sind, als unter Einstellungen > Grundeinstellungen > Weitere Einstellungen > Datenschutz > Abgebrochene Bestellungen nach X Monaten löschen definiert.

CronBirthday:

  • Geburtstagsgruß: Verschickt Geburtsgrüße per E-Mail an Kunden

CronRating:

  • Artikelbewertung per E-Mail: verschickt Erinnerung zur Artikelbewertung an den Kunden

CronStock:

  • Lagerbestands Warnung: Schickt eMail mit Artikel-Lagerbestand an hinterlegte E-Mail-Adresse

CronRefresh:

  • Aufräumen: Bereinigt s_core_log, s_emarketing_lastarticles, s_search_statistics
  • Basket Signature cleanup: Bereinigt die s_order_basket_signatures und setzt dadurch die Session des Checkouts zurück
  • Guest customer cleanup: Löscht inaktive Schnellbesteller
  • Opt-In table cleanup: Bereinigt die s_core_optin

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".

Die Cronjob-Steuerung im Detail

  • Name (1): Name des Cronjobs (Funktion).
  • Aktion (2): Funktion im Cronjob.
  • Ergebnisdaten (3): Informationen aus der Funktion.
  • Letzte & Nächste Ausführung (4): Datum & Uhrzeit der letzten und nächsten Ausführung des Cronjobs.
  • Intervall (5): Gibt den Intervall in Sekunden an, wann die Funktion als nächstes aufgerufen wird.
  • Aktiv (6): Schaltet die Funktion An oder Aus.
  • Bei Fehler deaktivieren (7): Deaktiviert den Cronjob, falls bei der Ausführung Fehler auftreten. (Im Standard aktiv)
  • E-Mail-Empfänger (8): Gibt dem Empfänger eventuell in der Funktion zu verschickende E-Mails an.
  • E-Mail-Template (8): Optional verwendetes E-Mail-Template.

Einige dieser aufgeführten Cronjobs werden nur im Zusammenhang mit dem Plugin CronRefresh ausgeführt.

Cron Sicherheit

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:

  • Gültiger Schlüssel: Hier können Crojobs nur noch per URL Attribut mit dem gültigen Schlüssel aufgerufen werden. An die bestehende URL ist dann ?key=MEINKEY anzuhängen
  • Zulässige IP(s): Aufrufe von Cronjobs werden nur noch von hier eingetragenen IPs akzeptiert. Mehrere IPs werden durch ein ';' getrennt.
  • Durch Benutzerkonto absichern: Cronjobs werden nur dann aufgerufen, wenn ein Benutzer im Backend eingeloggt ist.

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!

Wie starte ich einen Cronjob?

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.

Cronjob per Browser starten

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.

Aufruf per Shell / Konsole

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.

Cronjob Einrichten

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.

Beispiele um den direkten Aufruf zu konfigurieren

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)

Spezielle Cronjobs über die CLI ausführen

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.

HTTP-Cache aufwärmen

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

Weitere Befehle findest du in unserem Shopware CLI Artikel.

Wenn es nicht klappt

Rechte

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.

Mailfunktionen

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.

War dieser Artikel hilfreich?