Zum Inhalt springen

Cron Job im CLI Mode - Pfadproblem

Erstellt am 29. Februar 2008 · 7 Antworten · letzte Antwort am 16. Juni 2009

Tags: Frage

jakeblake ·

Hi,

ich habe einen Cronjob geschrieben, welcher im CLI Mode laufen soll. Die Basiskonfiguration habe ich aus dieser Anleitung:
http://www.sk-typo3.de/Cronjob-mit-TYPO3-mit-dem-CLI-Inter.357.0.html
übernommen.

Wenn ich nun den Cronjob ausführe:

 php /html/typo3conf/ext/myextension/cli/myextension_cli.phpsh

erhalte ich in der Basiskonfiguration diesen Fehler:

X-Powered-By: PHP/4.4.1
Content-type: text/html; charset=iso-8859-1

<br />
<b>Warning</b>:  main(/usr/bin/conf.php): failed to open stream: No such file or directory in <b>/html/typo3conf/ext/myextension/cli/myextension_cli.phpsh</b> on line <b>16</b><br />
<br />
<b>Fatal error</b>:  main(): Failed opening required '/usr/bin/conf.php' (include_path='.:/usr/share/php/pear:./usr/share/php/pear/PEAR') in <b>/html/typo3conf/ext/myextension/cli/myextension_cli.phpsh</b> on line <b>16</b><br />

Ändere ich die Pfade so, dass die Dateien gefunden werden, bekomme ich von Typo (aus der init.php) den Fehler:

X-Powered-By: PHP/4.4.1
Content-type: text/html; charset=iso-8859-1

Error in init.php: Path to TYPO3 main dir could not be resolved correctly. <br /><br /><font color="red"><strong>This happens if the last 6 characters of this path, /usr/bin/ ($temp_path), is NOT "typo3/" for some reason.<br />
                You may have a strange server configuration.
                Or maybe you didn't set constant TYPO3_MOD_PATH in your module?</strong></font><br /><br />If you want to debug this issue, please edit typo3/init.php of your TYPO3 source and search for the die() call right after this line (search for this text to find)...

Der TYPO3_MOD_PATH wird ja in der conf.php gesetzt. Sowohl relativ:

define('TYPO3_MOD_PATH', '../typo3conf/ext/myextension/cli/');

als auch absolut:

define('TYPO3_MOD_PATH', '/html/typo3conf/ext/myextension/cli/');

brachte das die o.g. Fehlermeldung.
Jetzt bin ich bisschen ratlos, wie man die Pfade noch einstellen könnte.

Vielen Dank für euere Hilfe!
Jake

Winddancer ·

Hallo Jake,

das kann mehrere Gründe haben. Ich versuche mal ein paar aufzuzeigen, vielleicht können wir Dein Problem damit lösen.

Erstmal solltest Du für den Cronjob immer den absoluten Pfad nutzen. Also wie Du selber schon geschrieben hast:

php /html/typo3conf/ext/myextension/cli/myextension_cli.php

Das nächste was Du kontrollieren solltest ist, ob die richtige PHP Version für die Cron Jobs ausgeführt wird. Auf vielen Webservern, insbesondere denen mit einer Administrationsoftware wie Confixx, Plesk usw., gibt es meist zwei PHP Versionen. Einer für das Frontend, sprich die normalen Webseiten und eine für das Backend, die Konfigurationssoftware. Diese sind meist nicht mit den gleichen Versionen und Optionen kompiliert.

Ist natürlich nur eine Idee, aber leg doch einfach mal ein phpinfo datei an. Dort kannst Du den Pfad zu Deiner PHP Version verifizieren.
Achte im configure Statement auf "'--exec-prefix=".

Dieser Wert muss vor PHP eingetragen werden. Steht beispielsweise das in deinem configure prefix:

'--exec-prefix=/opt/php5.2.5'

Muss Dein Cron Job Aufruf so aussehen:

'/opt/php5.2.5/php /html/typo3conf/ext/myextension/cli/myextension_cli.phpsh'

Das bezieht sich jetzt natürlich erstmal nur auf die Annahme, dass die falsche PHP Version beim Aufruf deines Cron Jobs genutzt wird.

Ansonsten kann ich Dir nur erstmal raten, (je nachdem wieviel Du aus den Conf Dateien und typo3 Dateien brauchst) alle notwendigen Daten in das Cron Job File zu schreiben, damit Du nichts inkludieren musst und Du so das Problem einkreisen kannst.

Hoffe das hilft Dir. Habe am Anfang auch ziemlich lange nach diesen Problemen gefahndet!

Grüße

Sven

jakeblake ·

Hi,

mein Anbieter ist Mittwald und hier ist es nicht möglich, Einfluss auf das Anlegen des Cronjobs zu nehmen. Es läuft so, dass ich über das Ticket System das Skript angebe, welches ausgeführt werden soll und dann legt Mittwald diesen Cronjob an. Dabei gehe ich natürlich davon aus, dass die richtige PHP Version verwendet wird. Man nimmt ja an, dass die das nicht zum ersten Mal machen...

Jedenfalls werde ich das im Ticket System noch einmal zur Sprache bringen. Mal sehen, ob die da was machen können...

Besten Dank erst einmal,
Jake

jakeblake ·

Hi,

das mit den Pfaden hat nichts gebracht. Die init.php wirft mich aufgrund dieses Fehlers:

Error in init.php: Path to TYPO3 main dir could not be resolved correctly. <br /><br /><font color="red"><strong>This happens if the last 6 characters of this path,  ($temp_path), is NOT "typo3/" for some reason.<br />
                You may have a strange server configuration.
                Or maybe you didn't set constant TYPO3_MOD_PATH in your module?</strong></font><br /><br />If you want to debug this issue, please edit typo3/init.php of your TYPO3 source and search for the die() call right after this line (search for this text to find)...

raus. Hat denn irgendjemand einen laufenden Cronjob im CLI Mode, damit man die Einstellungen mal vergleichen kann?

Nachtrag: Die PHP Version ist die gleiche!

Es bedankt sich,
Jake!

jakeblake ·

Die Lösung:

Seit Version 4.1 gibt es ein Dispatcher Skript:

/typo3/cli_dispatch.phpsh

Dieses Skript kümmert sich um die korrekte Einbindung der Pfade. Man muss nun in der gewählten Extension nur noch das PHP Skript hinterlegen und in der Datei ext_localconf.php folgendes Array definieren:

$TYPO3_CONF_VARS['SC_OPTIONS']['GLOBAL']['cliKeys']['meinCronJob'] = array('EXT:wge_exposemanager/cli/test.php','_CLI_user');

Anschließend kann man mit:

php /absoluter/pfad/typo3/cli_dispatch.phpsh meinCronJob

das Skript ausführen.

FrankT ·
jakeblake schrieb

Dieses Skript kümmert sich um die korrekte Einbindung der Pfade. Man muss nun in der gewählten Extension nur noch das PHP Skript hinterlegen und in der Datei ext_localconf.php folgendes Array definieren:

$TYPO3_CONF_VARS['SC_OPTIONS']['GLOBAL']['cliKeys']['meinCronJob'] = array('EXT:wge_exposemanager/cli/test.php','_CLI_user');

Hallo,

ganz blöde Frage: in welche ext_localconf.php?
Bei mir geht es um die rem_xml_import

Schreibe ich das in die typo3conf/localconf.php, so funktioniert es zum Teil, denn ich bekomme den Fehler, dass die Funktion xdebug bereits deklariert ist.

Hilfe!!!
Danke
Frank

FrankT ·

Es geht:

Ich habe die Datei XMLimport_cli.phpsh angegeben.
Es muss aber die class.xmlimport_cli.php sein, worin man dann noch ...

$crawlerObj = t3lib_div::makeInstance('xmlimport_cli');
$crawlerObj->CLI_main();

... schreiben muss.

Gruß
Frank

FrankT ·

Oje ... es geht doch nicht ...

Per SSH ist alles OK, aber beim CronJob kommt die Fehlermeldung ...

ERROR: Module name, "_cli_news_datenimport", was not prefixed with "_CLI_"

Wenn ich in der localconf _cli_ klein schreibe, bekomme ich auch per SSH diesen Fehler.
Schreibe ich dort _CLI_ groß, kommt der Fehler nur beim CronJob.

Kann es daran liegen, dass TYPO3 die BE-User immer klein schreibt?

Wie kann man den Fehler beheben/umgehen?

Viele Grüße
Frank