Mailinglisten-Archive |
Hi Nico, Am Montag, 28. August 2006 12:52 schrieb Nico Haase: > Lutz Zetzsche schrieb: > > Was machen die Crons? > > Zuerst werden per JOIN ISBN-Einträge aus einer Buchtabelle gesucht, > die in der Tabelle mit den Amazon-Daten nicht vorhanden sind. Neue > ISBN werden hierhin übernommen. Dann werden alle ISBN abgefragt, zu > denen noch keine Infos vorliegen (Spalte mit der letzten > Datenaktualisierung steht auf 0), und mit diesen ISBN wird dann eine > Anfrage auf die Amazon-Webservices gestartet. Nach Datenrückgabe > werden die ermittelten Preise in die Datenbank eingetragen und Cover > auf meinen Server transferiert. Sind da auch Abbruchbedingungen im Skript, also z.B. insbesondere, daß nicht weitergegangen wird, wenn z.B. Deine Datenbank nicht erreichbar sein sollte? Konkret: Ist ausgeschlossen, daß in diesem Fall beispielsweise plötzlich alle ISBNs von Amazon abgefragt werden und damit große Datenmengen auf Deinen Server transferiert werden? > > Können sie ihren Job auch in einer Minute erledigen, > > Grundsätzlich ja, da meist nur eine ISBN vorliegt, für die die Daten > abgefragt werden müssen. > > > oder läuft der Job schon erneut an, während der vorhergehende > > Aufruf noch gar nicht abgeschlossen werden konnte? > > Könnte das das Problem sein? Garantieren kann ich nicht, dass es > Überschneidungen gibt (siehe Reinholds Hinweis mit > Nichterreichbarkeit der Amazone), aber grundsätzlich sollte das wegen > der kurzen Laufzeit nicht passieren. Also grundsätzlich gibt es bei Deinem Skript diverse Gründe, warum etwas schief gehen kann oder die Laufzeit über einer Minute liegt. Wenn Du das nicht entsprechend abfängst, schaukelt sich die Serverlast hoch. Ich würde die Abstände zwischen dem Skriptaufrufen auf 5 Minuten erhöhen. Das müßte doch auch reichen. Außerdem solltest Du, wie Reinhold schon schrieb, sicherstellen, daß das Skript nur dann ausgeführt wird, wenn der vorhergehende Aufruf abgeschlossen ist. Letzteres ist auch sinnvoll, um Dateninkonsistenzen zu vermeiden. Der zweite Aufruf kann dem ersten ansonsten eventuell datentechnisch ins Gehege kommen und umgekehrt. > > Wie fängst Du Zeitüberschreitungen oder Abbrüche bei externen > > Verbindungen ab etc.? > > Die Abfrage läuft über die amazonLib / amazonSOAP, und diese Klasse > wiederum bedient sich bei nuSOAP. Die Standardeinstellung ($timeout = > 0, $response_timeout = 30) von nuSOAP wird nicht verändert. Du hast aber noch die Datenbankverbindung, die FTP-Verbindung... :-) Da gibt es eine Menge Unwägbarkeiten und Problemquellen. > > Loggst Du mit, was Deine Cronjobs machen? So könntest Du schneller > > herauskriegen, wo es hakt. > > In dem Fall logge ich noch nicht detaillierter mit, weil ich das erst > am Wochenende eingerichtet habe. Einzige Rückmeldung ist derzeit eine > Mail, die ich bei Abfrage mindestens einer ISBN an mich verschicken > lasse. Ok. Bau mal ein detailliertes Logging auf. :-) Auch mit Laufzeitinfos innerhalb des Skripts. Dann kannst Du sehen, in welchem Schritt das Skript u.U. wieviel Zeit verloren hat. :-) Du solltest dann direkt noch eine Ausnahmebehandlung beifügen, die Dir Fehler wegschreibt und kritische Fehler sofort per Mail meldet, also z.B. Deine Datenbank war nicht erreichbar, ein SQL-Befehl konnte nicht ausgeführt werden, Amazon war nicht erreichbar, Dein FTP-Server wollte nicht usw. Viele Grüße Lutz
php::bar PHP Wiki - Listenarchive