Magento CronJob wird nicht ausgeführt (> Version 1.9)

StartMagento & E-Commerce BlogMagentoMagento CronJob wird nicht ausgeführt (> Version 1.9)

In den vergangenen Tagen hatte ich bei zwei Projekten mit einem mysteriösen Phänomen zu kämpfen. Obwohl das Setup des CronJobs absolut korrekt war, lief der Magento CronJob (gemeint ist die cron.php) nicht. Da viele Tätigkeiten innerhalb von Magento über CronJobs gesteuert werden, ist das natürlich suboptimal, denn so wurden keine Mails versendet, das Cleanup wurde nicht durchgeführt und insgesamt hat man mit einem Rattenschwanz an Problemen zu kämpfen.

Die wichtigste Frage vorweg, bevor ich etwas zum Problem selbst sage: Wie findet man heraus, ob die über die cron.php gesteuerten Jobs in Magento überhaupt ausgeführt werden? Hierfür gibt es eine sehr coole und empfehlenswerte Extension namens AOE Scheduler. Hast Du diese Magento Extension installiert, kannst Du alle im System vorhandenen CronJobs manuell starten, hast aber zusätzlich eine Übersicht wann welcher Job ausgeführt wurde und ob es dabei zu einem Problem gekommen ist.

Auflistung der zuletzt ausgeführten CronJobs

Auflistung der zuletzt ausgeführten CronJobs

Anhand dieser Auflistung siehst Du relativ schnell, ob alles nach Plan läuft oder auch nicht. Der Heartbeat Task (siehe grüne Meldung oben) muss regelmäßig laufen. Wird an dieser Stelle eine entsprechende Meldung dargestellt (a la der Heartbeat lief vor 20 Minuten), weißt Du, dass es ein Problem gibt.

Exakt dieses Problem hatte ich, um den Bogen wieder zum eingangs erwähnten Problem zu spannen, nun bei zwei Kunden. Merkwürdig war die Tatsache, dass ein manueller Aufruf der cron.php Datei (www.deinedomain.de/cron.php) die CronJobs angestoßen hat, das in der CronTab hinterlegte Kommando aber nicht.

Nach etwas Recherche (und wie bei Magento immer notwendig – Glück) bin auf folgende Lösung gestoßen: Innerhalb der cron.php Datei muss (vorzugsweise in Zeile 50), das Statement „$isShellDisabled = true;“ ergänzt werden, wodurch Deine cron.php Datei wie folgt aussehen sollte:

...
$disabledFuncs = explode(',', ini_get('disable_functions'));
$isShellDisabled = is_array($disabledFuncs) ? in_array('shell_exec', $disabledFuncs) : true;
$isShellDisabled = (stripos(PHP_OS, 'win') === false) ? $isShellDisabled : true;
$isShellDisabled = true;
try {
if (stripos(PHP_OS, 'win') === false) {
$options = getopt('m::');
if (isset($options['m'])) {
...

Durch das manuelle setzen der Variable $isShellDisabled wird etwas weiter unten der Aufruf von zwei Shell Kommandos nicht ausgeführt, welche (vermutlich je nach Hosting-Setup), einfach Probleme bereiten und dadurch den ganzen CronJob Ablauf stören.

Mit dieser Anpassung konnte ich in meinen zwei konkreten Fällen das Problem der nicht ausgeführten CronJobs lösen.

4 thoughts on “Magento CronJob wird nicht ausgeführt (> Version 1.9)

  1. Super! You saved my day ..
    Hatte eben auch diesen Fehler und schon einen halben Herzinfarkt ;D .. da eine Zeit lang nun kein Cron lief.

    Kurz den Fix eingebaut und nun läuft der Laden wieder!
    Danke dir.

  2. Darf man fragen bei welchem Hoster das Problem auftritt? Ich habe den Webspace bei 1und1 und nach Änderung laufen die crons noch immer nicht 🙁

    Danke

  3. Mir standen schon leicht die Tränen in den Augen. Danke für Deinen Tip. Lief auf anhieb.
    @ben
    Bei einem 1und1 managed server scheint crontab nur mit php4.4 auszuführen, jedoch von extern via browser mit der Version die im c-panal eingestellt ist (warum auch immer). Wie in der Hilfe den cronjob mit Umweg über http-Requests anlegen:
    * * * * * /usr/bin/lynx http://deineseite.de/cron.php

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.