Wir haben eine Jobtabelle. In dieser Tabelle sind verschiedene Parameter gespeichert, die von einem PHP Script File verarbeitet werden.
Bei diesem Skript handelt es sich um verschiedene Datenbank und Filesystem Operationen. Je Skript gibt es eine Auführungsdauer von ca 1 min bis 30 min. Jedes Skript macht also anhand
der Jobid seine Arbeit. ( z.B. jobexecuter.php?jobid=15 … jobid=19… jobid=23). Da es sich um PHP Skripts handelt ist die PHP Execution Timout auf 1 h gesetzt in der php.ini. PHP arbeitet nicht im Safemode. Die Skripts werden nur in einer Intranetumgebung ausgeführt.
Über einen Webbroser kann ich nun jeweils die einzelnen jobs über meinen jobexecuter anhand der Jobid manuell ausführen lassen (e.g. ’ jobexecuter.php?jobid=15’). Diese Funktionalität ist gegeben und funktioniert auch einwandfrei.
Jetzt meine Frage:
Gibt es eine Möglichkeit das Vorgehen zu Automatisieren. Also ein Batch Skript (Windows) bzw. shellscript(Unix) zu erstellen, das mir die aktuellen Jobids aus der Datenbank holt und dann in einem Batch Skript z.b.
Php –f jobexecuter.php 15
Php –f jobexecuter.php 18
Php –f jobexecuter.php 19
aufruft.
Der Sinn dabei ist, dass meine Jobskripte im Hintergrund ablaufen können und dann über geplante Tasks(Windows) oder die Crontab (Unix) laufen koennen,
Für das laden der jobids könnte ich ein weiteres php script erstellen das mir einen Array mit Ids zurueckgibt. Aber wie kann ich diesen Array an das Batch File zurueckgeben, so das die verschiedenen „Php –f jobexecuter.php x“
Anhand der Array Values in einer Batch Schleife ausgeführt werden können.
Pseudocode job.bat
Php –f Getids.php > Array
Foreach (Array as Jobid)
{ Php –f jobexecuter.php Jobid
}
Was ganz wichtig wäre: Wie kann ich erreichen dass die PHP Executions nicht nacheinander ablaufen sondern gleichzeitig. Gibt es eine möglichkeit dafür in einem batch Skript die PHP Execution als Kindprozesse des aktuellen PHP Prozesses ablaufen zu lassen (Stichwort Multithreading). Oder könnte man für jeden Schleifendurchlauf eine Komandozeilen Fenster aufpoppen lassen.
Bei diesem Skript handelt es sich um verschiedene Datenbank und Filesystem Operationen. Je Skript gibt es eine Auführungsdauer von ca 1 min bis 30 min. Jedes Skript macht also anhand
der Jobid seine Arbeit. ( z.B. jobexecuter.php?jobid=15 … jobid=19… jobid=23). Da es sich um PHP Skripts handelt ist die PHP Execution Timout auf 1 h gesetzt in der php.ini. PHP arbeitet nicht im Safemode. Die Skripts werden nur in einer Intranetumgebung ausgeführt.
Über einen Webbroser kann ich nun jeweils die einzelnen jobs über meinen jobexecuter anhand der Jobid manuell ausführen lassen (e.g. ’ jobexecuter.php?jobid=15’). Diese Funktionalität ist gegeben und funktioniert auch einwandfrei.
Jetzt meine Frage:
Gibt es eine Möglichkeit das Vorgehen zu Automatisieren. Also ein Batch Skript (Windows) bzw. shellscript(Unix) zu erstellen, das mir die aktuellen Jobids aus der Datenbank holt und dann in einem Batch Skript z.b.
Php –f jobexecuter.php 15
Php –f jobexecuter.php 18
Php –f jobexecuter.php 19
aufruft.
Der Sinn dabei ist, dass meine Jobskripte im Hintergrund ablaufen können und dann über geplante Tasks(Windows) oder die Crontab (Unix) laufen koennen,
Für das laden der jobids könnte ich ein weiteres php script erstellen das mir einen Array mit Ids zurueckgibt. Aber wie kann ich diesen Array an das Batch File zurueckgeben, so das die verschiedenen „Php –f jobexecuter.php x“
Anhand der Array Values in einer Batch Schleife ausgeführt werden können.
Pseudocode job.bat
Php –f Getids.php > Array
Foreach (Array as Jobid)
{ Php –f jobexecuter.php Jobid
}
Was ganz wichtig wäre: Wie kann ich erreichen dass die PHP Executions nicht nacheinander ablaufen sondern gleichzeitig. Gibt es eine möglichkeit dafür in einem batch Skript die PHP Execution als Kindprozesse des aktuellen PHP Prozesses ablaufen zu lassen (Stichwort Multithreading). Oder könnte man für jeden Schleifendurchlauf eine Komandozeilen Fenster aufpoppen lassen.
Kommentar