Timeout in einem Cronjob umgehen?
Michael
- php
0 Nick0 AllesMeins
Hallo da draußen!
Ich hab ein kleines Problem:
Und zwar würde ich gern ein Script per Cronjob starten, habe aber die Befürchtung, daß das Script je nach zu bearbeitender Datenmenge über die vom Provider vorgegebene Timeout-Grenze (30sek) schießen könnte.
Mein erster Gedanke war, das Script halt rekursiv zu gestalten, so daß es sich selbst wieder aufruft, falls es mit der Bearbeitung nicht fertig geworden ist. Jedoch sind sämtliche Befehle ála exec(), system(), passthru() usw. vom Provider aus Sicherheitsgründen deaktiviert.
Die Alternative das Script als cgi zu schreiben, kann ich auch knicken, da ich von Perl nicht die blasseste Ahnung habe. (Und wenn der Timeout für mich der einzige Pluspunkt gegenüber php ist, bin ich auch nicht sonderlich motiviert, es zu lernen.)
Der Hintergrund ist folgender:
Ich würde gern wohnzeit24.de um eine personalisierte Suchfunktion erweitern. Man kann dort über die Suchseite Zimmer zur Untermiete finden. Sollte jemand jedoch nichts nach seinem Geschmack finden, so sollte er die Möglichkeit haben die Suche in der DB abspeichern zu können.
Der besagte Cronjob sollte dann allnächtlich die gespeicherten Suchabfragen nochmal ausführen um herauszufinden, ob die Suche neue Treffer ergibt und diese gegebenenfalls per Email dem Suchenden zustellen.
Soweit kein Problem - solange, bis die Anzahl der Suchanfragen in der DB die Laufzeit des Suchscripts überfordert.
Mein einziger notdürftiger Ansatz das Problem zu umgehen wär bisher, das Script nicht nur einmal pro Tag, sondern vielleicht einmal pro Stunde zu starten und die zu bearbeitenden Suchanfragen vorab stets nach denen zu filtern, die in den letzten 24h noch nicht ausgeführt wurden.
Das empfinde ich aber eher als Flickwerk.
Wüßte jemand eine elegantere Methode?
Vielen Dank für die Mühe!
Michael
Hallo auch!
[...]
Mein einziger notdürftiger Ansatz das Problem zu umgehen wär bisher, das Script nicht nur einmal pro Tag, sondern vielleicht einmal pro Stunde zu starten und die zu bearbeitenden Suchanfragen vorab stets nach denen zu filtern, die in den letzten 24h noch nicht ausgeführt wurden.
Das empfinde ich aber eher als Flickwerk.Wüßte jemand eine elegantere Methode?
Leider nicht wirklich.
Wenn die Execution Time begrenzt ist, faellt mir auch nur ein, die Bearbeitung entsprechend zu splitten, so dass jeder Teiljob unterhalb der max exec time liegt.
Nick
Hi,
eine alternative könnte sein ganz auf einen Cron-Job zu verzichten und die Sucharbeit den anderen Usern "zuzuteilen". Also sprich bei jedem Seitenaufruf einfach in die Datenbank zu gucken und zu schauen welche Suchen jetzt fällig sind und es dann zu starten.
Das hat den Vorteil, dass du das ganze in minimal kleine Einheiten zerlegst und die Anzahl der "Cron-Jobs" mit deiner Besucheranzahl steigt. Je mehr Besucher du hast (also je mehr es potentiell zu tun gibt) um so öfter werden auch die gespeicherten Abfragen abgearbeitet.
Ist zwar sicherlich auch keine "saubere" Lösung, aber das wären alle anderen Zerstückel-Lösungen auch nicht.
Ansonsten bleibt dir wohl nichts anderes als den Provider zu fragen ob sich die Begrenzung aufheben lässt oder dir nen anderen provider zu suchen.
Grüße
Marc