Ich möchte ein Import-Skript vom CRON des Servers starten lassen. Ich habe das Skript für 4.04 gemäß der Anleitung zur Verwendung der alten API erstellt und getestet. Ein Aufruf über http://www.meinedomain.de/backend/MeinImport funktioniert. Auf dem Server liegt ein Startskript mit allen Rechten: #!/bin/bash WSRV\_PATH="/pfad\_zur/www.meinedomain.de" PRG\_PATH="$WSRV\_PATH/services/www/html" #INCLUDEPATH="$WSRV\_PATH/services/www/html/engine/Shopware/Plugins/Local/Backend/MeinImport/" INCLUDEPATH="$WSRV\_PATH/services/www/html/" INI5\_FILE="/pfad\_zur/php.ini" PHP5\_PRG="/usr/bin/php" $PHP5\_PRG -d include\_path=$INCLUDEPATH -c $INI5\_FILE $PRG\_PATH/shopware.php /backend/MeinImport
Wenn ich diesen jedoch aufrufe, egal ob per CRON oder direkt erhalte ich die folgende Fehlermeldung: PHP Fatal error: Uncaught exception 'Enlight\_Exception' with message 'Invalid configuration file provided; PHP file does not return array value' in /pfad\_zur/www.meinedomain.de/services/www/html/engine/Library/Enlight/Application.php:387 Stack trace: #0 /pfad\_zur/www.meinedomain.de/services/www/html/engine/Library/Enlight/Application.php(154): Enlight\_Application-\>loadConfig('engine/Shopware...') #1 /pfad\_zur/www.meinedomain.de/services/www/html/engine/Shopware/Application.php(66): Enlight\_Application-\>\_\_construct('production', 'engine/Shopware...') #2 /pfad\_zur/www.meinedomain.de/services/www/html/shopware.php(72): Shopware-\>\_\_construct('production') #3 {main} thrown in /pfad\_zur/www.meinedomain.de/services/www/html/engine/Library/Enlight/Application.php on line 387
Wo ist mein Fehler?
Ich habe im Zuge der Fehlersuche nun einmal versucht, den normalen CRON über ... shopware.php /backend/cron
aufzurufen. Während das entsprechende Skript unter 3.5 einwandfrei funktioniert, kommt auch hier die oben beschriebene Fehlermeldung “…on line 387”. Die Änderung bzgl. des führenden Backslashs habe ich berücksichtigt.
Den ersten Teil der Lösung kann ich präsentieren: Die Skripte waren in einem Verzeichnis ausserhalb des html Ordners untergebracht. Dort verursachen sie o.g. Fehler. Legt man die Skripte ins selbe Verzeichnis, wie die Shopware.php funktioniert es. Bei 3.5 hat es auch von ausserhalb funktioniert. Neues Problem: Der Controller ruft das eigentliche Skript nicht auf: class Shopware\_Plugins\_Backend\_MeinImport\_Bootstrap extends Shopware\_Components\_Plugin\_Bootstrap { public function install() { $event = $this-\>createEvent( 'Enlight\_Controller\_Dispatcher\_ControllerPath\_Backend\_MeinImport', 'onGetControllerPath\_Backend' ); $this-\>subscribeEvent( 'Shopware\_CronJob\_MeinImport', 'onRun' ); $this-\>subscribeCron("MeinImport","MeinImport",5,true); return true; } public static function onRun(Enlight\_Components\_Cron\_EventArgs $args){ $this-\>View()-\>setTemplate(); define("\_auth",false); return dirname(\_\_FILE\_\_).'/MeinImport.php'; } public static function onGetControllerPath\_Backend(Enlight\_Event\_EventArgs $args){ define("\_auth",false); return dirname(\_\_FILE\_\_).'/MeinImport.php'; } }
Start über http://www.meinedomain.de/cron funktioniert nicht. Start über http://www.meinedomain.de/backend/MeinImport funktioniert.
Die Lösung schließlich: [list] - Ich verwende einen Frontend Controller statt eines Backend Controllers, aufgrund der Problematik mit der Authentifizerung. - Das Startskript, was vom CRON Job aufgerufen wird, liegt im selben Verzeichnis wie shopware.php, da ansonsten der Pfad zu config.php nicht gefunden wird (Fehler oben). - Ich starte das Skript mit Curl: curl -o /var/log/MeinImport.log "http://www.meinedomain.de/MeinImport"
[/list] Danke an ottscho!