Datei mittels Cronjob mit exec ausführen

Hallo,

habe ein Problem und zwar rufe ich eine PHP Datei mittels cronjob auf und das funktioniert auch.

In der PHP Datei rufe ich verschiedene Dateien innerhalb ein Schleife auf und für diese Dateien per exec() auf - ein Beispiel innerhalb der Schleife

exec(’/usr/bin/php ./’.$datei.’.php’);

Die Dateien werden aber leider nicht ausgeführt, weiß jemand woran das liegt ? Rufe ich die Datei, welche auch über den Cron aufgerufen wird auf so werden die Dateien mit exec ausgeführt.

Bin da mit meinem Latein am Ende. Würde mich über Hilfe und Tipp freuen

LG

  • Gibt es Fehlermeldungen?

  • Lenkst Du die Ausgabe in der Crontab mittels >> /path/to/file/filename.log am Ende der Zeile in eine Datei um, in die der cron-User auch schreiben darf? Wenn Du dahinter noch 2>&1 schreibst, werden auch die Fehlermeldungen in die gleiche Datei geschrieben.

  • Schließlich solltest Du am Anfang der PHP-Datei mit
    ini_set(‚display_errors‘,1);
    ini_set(‚display_startup_errors‘,1);
    error_reporting(-1);
    alle Fehlermeldungen einschalten.

  • Eine Möglichkeit ist, dass der Cron-User zwar die Rechte hat, das ursprüngliche Skript auszuführen, aber nicht das intern aufgerufene. Du kannst da mal versuchsweise allen alles erlauben:
    chmod 777 file_name

  • Auch der Aufruf von /usr/bin/php könnte für den Cron-User nicht erlaubt sein. Kannst Dir mit ls -all die Rechte ansehen und ggf. auch wie oben verändern.

  • Schließlich kann es noch sein, dass die Ausführung von exec nicht erlaubt ist. Auf der PHP-Seite dazu,
    http://php.net/manual/en/function.exec.php
    steht beispielsweise:
    Note: When safe mode is enabled, you can only execute files within the safe_mode_exec_dir. For practical reasons, it is currently not allowed to have … components in the path to the executable.

  • Die PHP Einstellungen kann man sich mit dem PHP-Befehl phpinfo() ausgeben lassen. Beachte, dass das Kommandozeilen-PHP (wozu der Aufruf per Crontab vermutlich gehört) unterschiedliche Einstellungen hat zu dem vom Webserver aufgerufenen (üblicherweise /etc/php5/php.ini und /etc/php5/apache2/php.ini).

Ich hoffe, das ein oder andere von der Liste hilft oder hilft Dir per Google weiter zu recherchieren.

Viel Erfolg!

Hallo,

Cron verwendet vermutlich andere Pfade. Um das auszuschliessen, trage einfach statt ./ jeweils den kompletten Pfad ein.
Also zum Beispiel:
exec(’/usr/bin/php /home/deinname/phpcrons/’.$datei.’.php’);

Viel Erfolg!

Hallo sideboy,
ich vermute es liegt daran, dass die php-Dateien im falschen Verzeichnis (in dem ArbeitsVerzeichnis das der Cron Daemon verwendet), anstatt im Verzeichnis wo deine Start php Datei liegt…

am einfachsten könntest du es probieren wenn du dieses an den Start deiner start php datei anfügst:

chdir(‚verzeichnis wo die zu startenden .php liegen‘);
anderer code…
exec(’/usr/bin/php ./’.$datei.’.php’);

oder aber:

$scriptpath=dirname(realpath($_SERVER[‚SCRIPT_NAME‘]));
anderer code…
exec(’/usr/bin/php ‚$scriptpath.$datei.‘.php’);

wenn du dann deine Datei mit php /home/sr-softwareat/startme.php aufrufst
wird $scriptpath auf /home/sr-softwareat gesetzt…
und du hast das verzeichnis wo deine start php liegt…

oder vieleicht noch einfacher:

<php>
chdir(dirname(realpath($_SERVER[‚SCRIPT_NAME‘])));
anderer code…
exec(’/usr/bin/php ./’.$datei.’.php’);
restlicher code…
</php>

dann brauchst du nur eine neue Zeile am Dateianfang und der Rest bleibt gleich…

habe ein Problem und zwar rufe ich eine PHP Datei mittels
cronjob auf und das funktioniert auch.

In der PHP Datei rufe ich verschiedene Dateien innerhalb ein
Schleife auf und für diese Dateien per exec() auf - ein
Beispiel innerhalb der Schleife

exec(’/usr/bin/php ./’.$datei.’.php’);

Die Dateien werden aber leider nicht ausgeführt, weiß jemand
woran das liegt ? Rufe ich die Datei, welche auch über den
Cron aufgerufen wird auf so werden die Dateien mit exec
ausgeführt.

Kann leider nicht helfen - bitte an Kollegen wenden!
BG Peter

Hallo sideboy,

habe leider noch keine Erfahrung mit cronjob, so dass ich Dir nicht weiterhelfen kann.

LG Frank

Hallo, nach der Schilderung vermute ich, dass es an ungenügenden Zugriffsrechten liegt.
Da ich das selbst noch nie versucht habe, ist das aber eine Vermutung.

Hallo

Ich vermute es liegt an fehlenden Berechtigungen. Im Linux Systemen darf nicht jeder User Files ausführen.

Bist du sicher das das hauptscript vom cron gestartet wird?
Ich hatte mal den Fehler, das ich die letzte leerzeile im crontab vergessen hatte und deswegen der cronjob einfach nicht starten wollte.

Schau mal ob dir die threats evtl. weiter helfen

http://www.synology-forum.de/showthread.html?12680-e…

http://www.synology-forum.de/showthread.html?14471-C…

Lg frank