Brauche Hilfe bei Mini-Batchprogramm
Bodo Kaelberer <[email protected]>
| Newsgroups | gmane.linux.suse.programming |
|---|---|
| Message-ID | <[email protected]> |
Hallo
Ich habe ein sooo kleines Problem, aber ÃŒberhaupt keinen Plan von
Batch-Programmierung unter Linux. Also denke bitte keiner, er hÀtte
die Lösung und sagt sie aber nicht, weil die zu einfach wÀre und daher
nicht die Lösung sein kann (-;
Folgendes:
Ich habe ein ÃŒber den Webserver (also vom Browser) aufgerufenes
PHP-Script, welches per exec() (oder auch system() oder popen() - das
Problem ist immer dasselbe) ein weiteres PHP-Script aufruft, das im
Hintergrund eine sehr aufwendige Aktion durchfÌhrt, die weit lÀnger
dauert kann, als das erste Script warten kann/will.
Das sind als Kommando dann so aus:
$cmd = "/usr/local/bin/php -f /..../test_called.php > $fileOutput &";
system( $cmd );
Auf manchen Systemen funkioniert der Aufruf des zweiten Scriptes
nicht, sondern es wird immer wieder das erste aufgerufen.
Konkret kenne ich zwei Systeme, bei denen es nicht funktioniert und
beide verwenden PHP nicht als Modul, sondern als PHP-CGI.
Mein Provider (der eines der beiden Systeme hat) meint, es liegt
daran, dass der Interpreter den Scriptnamen nicht als Argument
entgegegennimmt, sondern aus der Umgebungsvariable SCRIPT_FILENAME
holt.
Und tatsÀchlich ist es so, dass wenn ich unter ssh diesen Wert setze
und danach den Interpreter aufrufe, er nicht mehr das beim Aufruf
ÃŒbergebene Script verwendet, sondern immer das aus SCRIPT_FILENAME.
Ich brauche also eine Möglichkeit, entweder den Wert dieser
Umgebungsvariable frei zu setzen oder ihn zu löschen.
Aber wie kann ich eine Umgebungsvariable fÃŒr ein per exec()
aufgerufenes Script setzen/löschen?
Mein Ansatz war, ein Batch zu schreiben, der die Variable setzt und
dann den Interpreter aufruft. Das hat aber so ÃŒberhaupt nicht
funktioniert, dass ich nicht mal meinen Lösungansatz posten will (-;
Und am liebsten hÀtte ich auch noch eine Lösung, der ich beim Aufruf
des Batches noch einen Parameter ÃŒbergeben kann. Das zweite Script
braucht nÀmlich eigentlich noch einen Parameter, der ihm mitteilt, was
es tun soll.
Also konkret hoffe ich auf folgende Lösung:
============= Script 1 ===========
$command = "mybatch $JOB_ID > erg.txt &";
exec( $command );
==================================
und
============= mybatch ============
Lösche SCRIPT_FILENAME
/usr/local/bin/php script2.php <WERT DES ARGUMENTS "$JOB_ID">
==================================
Sieht doch ganz einfach aus - ich schaff's aber nicht.
Bye
--
1 Bodo Kaelberer
123 http://www.webkind.de/ http://www.kaelberer-aio.de/
3 Dem VerstÀndnis ist meist gut getan, wenn man richtig lesen
4 kann.
--
Um die Liste abzubestellen, schicken Sie eine Mail an:
[email protected]
Um eine Liste aller verfÃŒgbaren Kommandos zu bekommen, schicken
Sie eine Mail an: [email protected]