Dieses Tutorial befasst sich damit, wie man in Magento einen Cronjob einrichtet. Mit einem Magento Cronjob können zeitgesteuert Skripte vom Webserver aufgerufen werden, ohne das man manuell eingreifen muss. Dies kann sehr praktisch für wiederkehrende Aufgaben sein, um diese nicht immer manuell ausführen zu müssen. Manche Bestandteile in Magento erfordern ein Skript das regelmäßig ausgeführt wird, diese sind unter anderem:
- Katalogpreis-Regeln
- Versenden von Newslettern
- Generieren von (Google) Sitemaps
- Kunden-Benachrichtigungen / Benachrichtigungen (Produkt Preisänderung, Produkt wieder im Lager)
- Automatische Aktualisierung der Währungskurse
- Logs-Bereinigung
Einrichtung eines Cronjobs
Für die Einrichtung sind vier Schritte nötig. Zu Begin ist ein Eintrag in der Crontab des Servers zu machen. anschließend die die Konfiguration in Magento sowie dem Modul. Zu guter letzt noch die visuelle Überwachung.
Magento Cronjob mit Crontab erstellen
Magento ermöglicht es Ihnen, benutzerdefinierte Aufgaben in einer XML-Konfiguration zu erstellen, in ähnlicher Weise wie dem UNIX-Crontab-Stil. Jedes Modul lässt sich mit der im jeweiligen Modul vorhanden config.xml per Cronjob ansteuern. Hier ist ein Beispiel aus app / code / core / Mage / CatalogRule / etc / config.xml der Magento Version 1.9.3.2:
Zur Erläuterung dieses Cronjob <crontab> ab Zeile 188:
*/1 heißt alle 1 Minuten
* in jeder Stunde
* an jedem Tag
* in jedem Monat
* in jedem Jahr
In dem oben genannten Cronjob heißt das also das CatalogUpdate soll jede Stunde ausgeführt werden.
Wenn ein PHP-Skript auf dem Webserver liegt kann man es, wenn man es jeden Tag um 01:00 Uhr ausführen will so starten:
00 01 * * * lynx –dump http://www.beispiel.de/pfad/zum/skript.php
Weitere Möglichkeiten den Cronjob zu starten
Wenn Sie keinen Zugriff auf Crontab auf Ihrem Server haben, um den Cronjob einzurichten, können Sie sich die Seite, die in regelmäßigen Abständen ausgeführt werden muss als Lesezeichen im Browser setzen (http://www.beispiel.de/pfad/zum/cron.php). Jedes Mal, wenn Sie die Seite aufrufen, wird die geplante Aufgabe auf dem Server ausgeführt.
Wenn keine der oben genannten Möglichkeiten funktioniert, gibt es eine Reihe von Online-Diensten (Auflistung unter http://onlinecronservices.com) die nützlich sein können. Viele sind kostenlos, aber es gibt Einschränkungen bezüglich der Ausführungs-Frequenz oder Jobanzahl.
Verwaltung der Cronjobs in Magento
In Magento gibt es eine Datenbanktabelle in der alle Cronjobs gespeichert werden. Ist ein Cronjob korrekt angelegt kann man ihn in der tabelle „cron_schedule“ finden. Dort wird neben dem Namen auch der aktuelle Status, das Datum sowie die Uhrzeit gespeichert.
Im Backend findet man unter System > Konfiguration > Erweitert > System den Tab „Cron“. In diesem Tab wird Magento konfiguriert, wie es mit den Cronjobs umgehen soll.
Übersicht der Magento Cronjobs
Von Haus aus gibt es leider keine schöne Übersicht welche Cronjobs es gibt, welche Cronjobs anstehen oder welche evtl deaktiviert sind. Wer eine schöne Übersicht sucht wird bei Fabrizio Branca fündig, denn dieser hat einen Magento Cron Scheduler programmiert, der genau diese Aufgaben übernimmt. Alternativ gibt es den AOE Scheduler auf Magento Connect.
Magentos integrierte Cronjobs
Die folgenden Cronjobs kommen zusammen mit der Magento-Installation (das unten stehende Beispiel ist aus Version 1.7). Ein standardmäßig auskommentierter Cronjob ist mit (*) gekennzeichnet:
Module | Cronjob | Cron Syntax | Frequenz |
---|---|---|---|
Log | log/cron:: logClean | System→Log Cleaning | |
log/aggregation:: run(*) | */10 * * * * | Every 10 minutes | |
Tax | tax/observer:: aggregateSalesReportTaxData | 0 0 * * * | Daily at midnight |
CatalogRule | catalogrule/observer:: dailyCatalogUpdate | 0 1 * * * | Daily at 1 am |
Sales | sales/observer:: cleanExpiredQuotes | 0 0 * * * | Daily at midnight |
sales/observer:: aggregateSalesReportOrderData | 0 0 * * * | Daily at midnight | |
sales/observer:: aggregateSalesReportShipmentData | 0 0 * * * | Daily at midnight | |
sales/observer:: aggregateSalesReportInvoicedData | 0 0 * * * | Daily at midnight | |
sales/observer:: aggregateSalesReportRefundedData | 0 0 * * * | Daily at midnight | |
Sitemap | sitemap/observer:: scheduledGenerateSitemaps | Google Sitemap→Generation Settings | |
Directory | directory/observer:: scheduledUpdateCurrencyRates | Currency Setup→Scheduled Import Settings | |
CatalogIndex | catalogindex/observer:: reindexAll(*) | 0 2 * * * | Daily at 2 am |
catalogindex/observer:: runQueuedIndexing(*) | * * * * * | Every time cron is run | |
ProductAlert | productalert/observer:: process | Catalog→Product Alerts Run Settings | |
Catalog | catalog/product_indexer_price:: reindexAll | 0 2 * * * | Daily at 2 am |
SalesRule | salesrule/observer:: aggregateSalesReportCouponsData | 0 0 * * * | Daily at midnight |
Newsletter | newsletter/observer:: scheduledSend | */5 * * * * | Every 5 minutes |