Magento Logo

In den vergangenen Tagen haben wir bei einem unserer Kunden ein Problem im Zusammenhang mit dem Magento Cronjob (cron.php) festgestellt. Aus irgend einem uns bis dahin unbekannten Grund ist der Cron nicht durchgelaufen. Dies hat in der Folge zu vielen Problemen im Shop geführt, da eine Vielzahl an Prozessen in Magento über Crons gesteuert werden und diese dann nicht mehr ausgeführt wurden. Wir erklären Ihnen hier, wie wir das Problem lösen konnten.

Problemanalyse
Bei näherer Betrachtung und Analyse der Fehler konnten wir schnell feststellen, dass die Probleme im Zusammenhang mit nicht ausgeführten Prozessen zu tun hatten. Aus Erfahrung wussten wir, dass diese Prozesse über Crons in Magento gesteuert werden. Trotzdem konnten wir den Fehler nicht reproduzieren, da der manuelle Aufruf der cron.php alle Aufgaben mit Bravour durchführte.

Lösung
Nach weiterer Analyse und Recherche haben wir dann herausgefunden, dass in der cron.php eine bestimmte Variable standardmäßig auf den Wert „true“ gesetzt werden muss. Genauer gesagt handelt es sich um die Variable $isShellDisabled. Fügen Sie also in Zeile 50 der cron.php folgendes ein: $isShellDisabled = true; Ihre Datei sollte dann etwa so aussehen:


$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::');

Ursache
Das setzen der Variable $isShellDisabled auf true führt dazu, dass bestimmte Shell-Befehle nicht ausgeführt werden. Anscheinend gibt es bei manchen Hostern Probleme mit diesen Befehlen, was dann dazu führt, dass die Ausführung des Crons abgebrochen wird. Wir haben festgestellt, dass dieses Problem auch bei vielen anderen Magento Shops auftritt. In unserem Fall hat diese Lösung geholfen. Falls Sie ebenfalls derlei Probleme haben, raten wir Ihnen diesen Workaround auszuprobieren. Wir wünschen Ihnen viel Erfolg !