| 

.NET C# Java Javascript Exception

2
Hallo zusammen,

ich möchte gerne per PHP Cronjob mehrere PHP-Skripte (CLI) so ausführen, dass sie möglichst nicht seriell abgearbeitet werden, da diese mitunter lange Laufzeiten haben und sich so die 5-minütige Ausführung (*/5) ggf. "überlappt".

Wie ist das auf der Linux Shell zu realisieren?

Danke!
News:
23.05.2011
doublem 683 1 1 9
3 Antworten
1
Ah, okay. Die paralllele Ausführung hatte ich nicht mitbekommen.
Ich habe jetzt drei Skript a.php, b.php und c.php angelegt.

<?php
for($i = 1; $i <= 1000000; $i++){
echo 'A' ;
}
?>
<?php
for($i = 1; $i <= 1000000; $i++){
echo 'B' ;
}
?>
<?php
for($i = 1; $i <= 1000000; $i++){
echo 'C' ;
}
?>

Darumherum habe ich folgendes Wrapper-Skript:
<?php
exec("nohup php a.php >> php.out & ");
exec("nohup php b.php >> php.out &");
exec("nohup php c.php >> php.out &");
?>

Durch das nohup und & am Ende werden die Kommandos in den Hintergrund geschickt. In der Datei php.out habe ich dann ein wildes Durcheinander von A, B und C. Die Skripte werden also parallel ausgeführt.
24.05.2011
carlptr 777 1 8
Wunderbar. Danke!
doublem 24.05.2011
2
Du kannst die fünf PHP-Skripte in ein Wrapper-Shell-Skript packen und dieses dann per Cron starten.

Dabei kannst du das nächste Skript zum Beispiel nur im Erfolgsfall (ReturnCode == 0) starten.

Beispiel:

#!/bin/bash
skript1.php && script2.php && script3.php


Um auszuschließen, dass mehere Instanzen paralllel laufen, kannst du z.B. eine bestimmte Datei anlegen beim Start und beim nächsten Start prüfen ob die Datei schon da ist. Am Ende des Wrapper-Skripts wird die Datei gelöscht.

Beispiel:
#!/bin/bash
file=/tmp/myscript
if [ -e $file ]; then
echo Job is already running
exit 1
else
touch $file
fi

skript1.php && script2.php && script3.php

rm $file
24.05.2011
carlptr 777 1 8
0
Vielen Dank für Deine Lösung.

Leider war ich etwas unpräzise bei der Problembeschreibung. Es ist nämlich so, dass die Zahl der auszuführenden PHP-Skripte sich ändert - daher gibt es ein "Master"-Skript, welches die jeweiligen "Child"-Skripte (zur Zeit noch seriell) aufruft.

Daher ist das Shell-Skript leider nur bedingt geeignet.

Gibt es vielleicht eine Möglichkeit, aus einem PHP Skript heraus asynchron weitere Skripte über die PHP Shell-Befehle auszuführen?
24.05.2011
doublem 683 1 1 9

Stelle deine Php-Frage jetzt!