phpbar.de logo

Mailinglisten-Archive

[php] Crons setzen sich fest

[php] Crons setzen sich fest

Lutz Zetzsche Lutz.Zetzsche at sea-rescue.de
Mon Aug 28 13:06:01 CEST 2006


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