peaceman: PHP Skript direkt über PHP Binary im Hintergrund arbeiten lassen

Beitrag lesen

Hallo Forenuser!

Ich habe folgendes Problem: Ich möchte per PHP einen Backgroundprozess (zur Videokonvertierung)auf der Linux Shell starten. Da jedoch einige Aufgaben erst nach abgeschlossener Konvertierung stattfinden können (zB Thumbs aus konvertierter Datei erstellen, Originalvideo löschen), möchte ich, dass ein PHP-Skript im Hintergrund aufgerufen wird, das seinerseits nacheinander die nötigen Prozesse aufruft, der Betrachter soll jedoch schon auf die nächsten Seite gelangen. Hier sitzt der Knackpunkt, da die Binaries "nicht gefunden" werden. Genug der Vorrede, nun ein paar Veranschaulichungen. BTW, ich benutze Suse 10.2 mit Apache 2.2.0 und "PHP 5.1.2 with Suhosin-Patch 0.9.6 (cli) ".

Folgendes läuft auf meinem Entwicklungs- und auf dem Produktivsystem einwandfrei:
(es werden nur die essentiellen Codestückchen präsentiert)

  
exec("/usr/bin/mencoder [argumente]");  
mach_thumbnails($video_neu);  
header("Location:weiter.php");  

-> mencoder-binary wird gefunden, konvertierung wird normal ausgeführt, php "wartet" natürlich, bis die konvertierung fertig ist, thumbs werden generiert, user gelangt auf die nächste seite.

  
exec("/usr/bin/mencoder [argumente] &> /dev/null &");  
mach_thumbnails($video_neu);  
header("Location:weiter.php");  

-> binary wird gefunden, konvertierung wird im hintergrund ausgeführt, thumbs werden nich erstellt, da ja die neue datei benötigt wird, user gelangt einfach auf die neue seite.

Will ich deshalb jedoch ein gesamtes Skript über die PHP-CLI laufen lassen steigt das Produktivsystem aus:
3)

  
exec("/usr/bin/php5 /srv/var/www/htdocs/encode.php &> /dev/null &");  
header("Location:weiter.php");  

mit zugehöriger encode.php:

  
if (exec("/usr/bin/mencoder [argumente] &> /dev/null &"))  
{ mach_thumbnails($video_neu); }  

-> Das Video wird ('nur') auf dem Produktivsystem nicht konvertiert. Lenke ich die Ausgabe in eine Datei um erhalte ich
sh: /mencoder: No such file or directory

auch ein einfaches "ls" lässt sich hier nicht ausführen (mit gleicher Fehlermeldung). Mit relativen und absoluten Pfaden hab ich schon wild herumprobiert, open_basedir auf "no value" gesetzt. Das Script wird ja angeschossen, hat aber irgendwie keine Rechte die Binaries auszuführen... kann es am Suhosin Patch liegen, dass gewisse "Ausführungstiefen" nicht mehr gestattet sind? Die Systeme sind sonst weitgehen identisch, es werden die gleichen Extensions geladen, etc. PHP ist bizarrerweise auf BEIDEN systemen mit --disable-cli kompiliert, was aber das Entwicklungssystem nicht davon abhält trotzdem seine Arbeit zu verrichten...? Mhm.

Wo könnte ich noch nachforschen, bzw. hat jemand schoneinmal ähnliche Erfahrungen gemacht? Falls noch irgendwie Code oder Infos zum besseren Verständnis fehlen - wird gern nachgereicht.

regards,
peaceman