Cronjob lässt sich nicht ausführen

ich habe wiedermal ein Problem, diesmal mit den Cronjobs. Ich habe die Cronjobs konfiguriert und der Testaufruf übern Browser funktioniert auch einwandfrei. Jetzt habe ich auf dem Server einen Cronjob erstellt und bekomme die Fehlermeldung, das der Zend Optimizer nicht installiert ist. Also wird der bei Ausführung von Scripten über die Konsole nicht geladen. Unser Server ist ne dedizierte Maschine, daher habe ich kein Zugriff auf die Konfigurationen und Rückfrage beim Provider brachte mir das Ergebnis: „Ist für PHP nicht möglich“. Nun dachte ich mir, das ich den Browseraufruf per wget ausführe, aber auch das geht nicht, weil ich da immer die Meldung „Permission denied“ erhalte. Sicher wäre ein antriggern von „extern“ möglich, aber das wollte ich unbedingt vermeiden… Hat noch jemand ne Idee oder kann mir helfen? Gruss René

Hallo Rene, es kann sein, dass Dein Hoster den Aufruf einer PHP Datei per Cronjob nicht erlaubt. Oft ist ein Aufruf über einen Interpreter jedoch möglich. Der Hinweis Zugriff verweigert zeigt das die PHP Datei nicht die Rechte 777 besitzt. Musst Du Dir mal auf dem Server anschauen. Gruß Jens

Oh, danke dass sich doch noch jemand mit diesem Problem beschäftigt :thumbup: ich hab mich grad nochmal damit beschäftigt und bemerkt, dass mein Aufruf falsch war, unser Server möchte dass etwas anders haben :oops: … nun steht der Zend Optimizer zur Verfügung und das Script wird ausgeführt… allerdings kommt es nicht sehr weit: [quote]PHP Warning: PHP Startup: Unable to load dynamic library ‘/usr/local/php5/lib/php/extensions/’ - /usr/local/php5/lib/php/extensions/: cannot read file data: Is a directory in Unknown on line 0 X-Powered-By: PHP/5.2.16 Set-Cookie: SHOPWARESID=56a9cb44b4d6b97e42d6e52769b4f2df; path=/; domain=. Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Content-type: text/html
Fatal error : Uncaught exception ‘PDOException’ with message ‘SQLSTATE[23000]: Integrity constraint violation: 1048 Column ‘remoteaddr’ cannot be null’ in /usr/www/users/plott/newshop/engine/Enlight/Vendor/Zend/library/Zend/Db/Statement/Pdo.php:228 Stack trace: #0 /usr/www/users/plott/newshop/engine/Enlight/Vendor/Zend/library/Zend/Db/Statement/Pdo.php(228): PDOStatement->execute(Array) #1 /usr/www/users/plott/newshop/engine/Enlight/Vendor/Zend/library/Zend/Db/Statement.php(300): Zend_Db_Statement_Pdo->_execute(Array) #2 /usr/www/users/plott/newshop/engine/Enlight/Vendor/Zend/library/Zend/Db/Adapter/Abstract.php(479): Zend_Db_Statement->execute(Array) #3 /usr/www/users/plott/newshop/engine/Enlight/Vendor/Zend/library/Zend/Db/Adapter/Pdo/Abstract.php(238): Zend_Db_Adapter_Abstract->query(‘INSERT INTO s_s…’, Array) #4 /usr/www/users/plott/newshop/engine/Shopware/Plugins/Default/Frontend/Statistics/Bootstrap.php(73): Zend_Db_Adapter_Pdo_Abstract->query(‘INSERT INTO s_s…’, Array) #5 /usr/www/users/plott/newshop/engine/Shop in /usr/www/users/plott/newshop/engine/Enlight/Vendor/Zend/library/Zend/Db/Statement/Pdo.php on line 234
[/quote] Scriptfehler oder Konfigurationsfehler? … das ist hier die Frage :slight_smile:

Wie rufst du das Script denn auf? Scheinbar fehlen die Parameter, also z.B. module=backend controller=cron - hier probiert er nämlich die Frontend-Plugins zu laden und diese funktionieren auf der Shell nicht immer - Zum Beispiel können keine Statistiken geschrieben werden, da das Server-Global-Array nicht zur Verfügung steht. Als Workaround könntest du in deiner config.php z.B. if (!isset($\_SERVER["REMOTE\_ADDR"])) $\_SERVER["REMOTE\_ADDR"] = "127.0.0.1"; schreiben. Denke aber, dass der Aufruf als solches verkehrt ist bzw. die Route zum Cronjob-Controller fehlt!

der komplette Aufruf: [quote]/home/httpd/cgi-bin/php5-fcgi-starter.fcgi /usr/www/users/plott/newshop/plotterinsel.php module=backend controller=cron[/quote]

Hast du das mit dem Workaround probiert? Eventell ignoriert der die Parameter, die du dort übergibst. Du könntest aber ja z.B. folgendes machen. In config.php if (empty($\_SERVER["REMOTE\_ADDR"])){ $\_GET["module"] = "backend"; $\_GET["controller"] = "cron"; }

ich hab jetzt grad mal deine 2. Variante probiert… und Yippieh! es funktioniert! :smiley: Kurze Frage noch dazu: Ist es denn wirklich nur möglich, dass die $_SERVER[“REMOTE_ADDR”] nicht gesetzt ist, wenn das der Konsolenaufruf ist? Ansonsten würden ja entweder Bots oder sogar Kunden die über sonstwelche Anonymousserver oder was weiss ich alles gehen, auf das Cronscript umgeleitet werden!? In diesem Fall könnte ich ja die Crontab wieder leeren :smiley: Gruss René

Hey, die Remote_Addr ist IMMER gesetzt - also auch bei Aufrufen durch Bots und co.

1 Like

ahja… hatte ich zwar auch so auf dem Schirm, aber war mir nicht mehr sicher, weils ja immer wieder neue Technologien gibt, die dieses und jenes verändern, verschleiern u.s.w. auf jeden Fall ist dieses Problem gelöst… ganz fett Danke wiedermal!:thumbup: