Cron-Job - viele Datenbankeinträge abarbeiten und mehrfache Scriptläufe

http://www.electrictoolbox.com/article/php/process-forking/

Siehe "Forking multiple child processes".
Musst aber mal ausprobieren, ob der Gateway das überhaupt packt, soviele Reqeust "quasi auf einmal" zu bearbeiten.
Ist zwar auf Englisch aber ich werde mich da mal "durchquälen"

pcntl kannst du aber nur einsetzen, wenn du PHP nicht als Apache-Handler (also lediglich CLI oder CGI) verwendest.
CGI wäre bei mir der Fall.

Davon ist wohl auszugehen (wird ja wohl kaum via Webbrowser laufen das Ganze).
Ich denke auch das dieser das verkraftet - ich bin ja nicht der einzige Kunde bei diesem Dienstleister.
 
Gedanken, die mir während des Lesens kamen.

(A) Wenn eine Durchführung ~1sek dauert, Du deutlich vierstellige Listen abarbeitest und den Cron jede Minute neu startest, dann führt das per se schon zu Chaos.
(B) Es hört sich an, als ob dieses Script ständig laufen sollte.
(C) Eine Idee wäre, ein sich selbst aufrufendes rekursives php-Script zu schreiben, das serverseitig angestoßen wird.
(D) Eine weitere Idee wäre eine Queue/Warteschlange in MySQL. Alle Tabellen-IDs eintragen und pro Rekursion eine gewisse Anzahl (zB 5) abarbeiten und dann sich wieder selbst aufrufen mit der query, die nächsten 5 unbearbeiteten auszugeben. Wenn die Liste leer ist, neu auffüllen.
(E) Letztlich soll es scheinbar eine automatisierte Arbeitsabfolge sein - schau Dir doch mal python an, wenn Du es aufm Server einsetzen kannst.. (Webhost oder Server ist die Frage)

mfg chmee
 
Hallo Chmee,

danke für deine Gedanken.
Deinen Gedanken D hatte ich schon aufgegriffen.
Ein rekursives Script wie in deinem Gedankgen C kann ich meiner Meinung nach nicht machen, da die Rekursion über einen Cron-Job nicht funktioniert (soviel ich weiß). Außerdem sollte es Funktionieren was ist wenn es einen Fehler gibt und das Script einfach nicht mehr läuft?

Python könnte ich auf meinem Server laufen lassen - auch das muss ich mir mal näher ansehen.
 
Für auftretende Fehler sollte man grad bei automatisierten Scripten irgendeinen Debug auswerfen und per eMail aussenden oder in ner log sammeln. Sonst kommst Du ja nie dahinter, was/wie/warum passiert ist.

Lassen wir mal den Rekursionsgedanken weg. Dann bau Dein php-Script so, dass es bei Aufruf eine timestamp date() nimmt, während des Durchlaufs eruiert, wieviele Einträge es abarbeiten kann (zB differenz zu date() nach 10 Aufrufen = 7 Sekunden, also Schleife auf ~50 Durchgänge setzen). Das in Verbindung mit der Queue sollte gut funktionieren, ohne dass es zu Überläufen/Hakeleien kommt.

mfg chmee
 
Zurück