Magento – Cronjob / Cron.php wird nicht ausgeführt

Nach einem Wechsel von einem 1.5er Magento auf einen 1.9er Magento gab es ein Problem mit dem Cronjob. Beim 1.5er wurde er problemlos (über Jahre) durch den Server nach Aufruf der URL http://www.shopadresse.de/cron.php ausgeführt und auch der AOE Scheduler war zufrieden.

Nun wurde aber auf dem Server zu einem 1.9er Shop gewechselt und der Cronjob wurde nicht mehr ausgeführt. Die URL wurde entsprechend angepasst. Auch bei manuellem Aufruf der cron.php über den Browser passierte nichts und der AOE Scheduler sagte nur, dass kein “heartbeat task” gefunden wurde.

Die Lösung war nun die cron.php im Rootverzeichnis zu öffnen und dann die Zeile

$isShellDisabled = true;

hinzuzufügen, so dass es dann so aussieht:

$disabledFuncs = explode(',', ini_get('disable_functions'));
$isShellDisabled = is_array($disabledFuncs) ? in_array('shell_exec', $disabledFuncs) : true;
$isShellDisabled = true;
$isShellDisabled = (stripos(PHP_OS, 'win') === false) ? $isShellDisabled : true;

Anschließend funktionierte der Cronjob wieder einwandfrei.

Es ist jedoch auch möglich die Ausführung der cron.php durch die .htaccess zu unterbinden. Daher am besten vorher mal in diese Datei schauen, ob dort (meist am Ende) Zeilen wie z.B.

###########################################
## Deny access to cron.php
    <Files cron.php>

############################################
## uncomment next lines to enable cron access with base HTTP authorization
## http://httpd.apache.org/docs/2.2/howto/auth.html
##
## Warning: .htpasswd file should be placed somewhere not accessible from the web.
## This is so that folks cannot download the password file.
## For example, if your documents are served out of /usr/local/apache/htdocs
## you might want to put the password file(s) in /usr/local/apache/.

        #AuthName "Cron auth"
        #AuthUserFile ../.htpasswd
        #AuthType basic
        #Require valid-user

############################################

        Order allow,deny
        Deny from all

    </Files>

vorhanden sind.

Dies unterbindet entsprechende Anfragen zum Ausführen der cron.php. Man sollte diese nicht unbedingt komplett entfernen, kann aber für den eigenen Server eine Ausnahme hinzufügen wie z.B.

    <Files RELEASE_NOTES.txt>
        order allow,deny
        Allow from HIER.DIE.SERVER.IP
        deny from all
    </Files>

In Kombination mit der Änderung der cron.php oben klappte dies ganz gut.

Update vom 18.10.2017

Ab Apache-Version 2.4 scheint o.g. Weg nicht mehr zu klappen. Daher haben wir diesen Teil der .htaccess wie folgt umgeschrieben:

###########################################
## Deny access to cron.php
<Files cron.php>

############################################
## uncomment next lines to enable cron access with base HTTP authorization
## http://httpd.apache.org/docs/2.2/howto/auth.html
##
## Warning: .htpasswd file should be placed somewhere not accessible from the web.
## This is so that folks cannot download the password file.
## For example, if your documents are served out of /usr/local/apache/htdocs
## you might want to put the password file(s) in /usr/local/apache/.

#Require valid-user

############################################

    Require all denied
    Require ip Ihre.IP.Adresse.Hier

</Files>

Dies funktioniert gut. Man kann übrigens auch die IP-Adresse nur teilweise ausschreiben. Anstelle von 127.0.0.1 könnte man auch 127.0 schreiben und dann wären die letzten beiden Bereiche egal.

Genutzt in Magento Version 1.9 Kommentare? Ergänzungen? Hinweise? Gerne!

Published by Covos

Seit 2009 arbeite ich nun intensiv mit Magento. Begonnen habe ich mit der Erstellung und dem Betrieb von B2C-Shops. Ausgeweitet wurde dies durch meine Tätigkeit im Logistik-Sektor. Hieraus entstanden erste spezialisierte B2E-Systeme. Heute arbeite ich tag-täglich mit spannenden B2C-, B2B- und B2E-Projekten und berichte in diesem Blog über Herausforderungen und gebe Insider-Tipps.

Leave a Reply

Your email address will not be published. Required fields are marked *