wget und administrative cronjobs

Wer – so wie ich – gerne seine CRON-Tabelle mit Hintergrund-Jobs füllt, die der Server beispielsweise ein mal pro Tag erledigen soll, der sollte gerade in der Kombination wget und PHP-Script etwas aufpassen. Es gibt da einen Fallstrick, der nicht auf den ersten Blick sichtbar ist:

Angenommen, das PHP-Script braucht etwas länger. Und genau das ist ja in der Regel der Fall. Dazu legt man solche Aufgaben in den Hintergrund.

WGET fängt also an, die PHP-Seite abzurufen – und wartet, und wartet, und wartet… Das macht es 900 Sekunden, also 15 Minuten lang. Wenn das Script dann noch nicht fertig ist, dann gibt wget auf zu warten. Und hier kommt der Haken: Es hört dann nicht auf, sondern es versucht es gleich noch mal. Standardmäßig 20 mal.

Wozu das führt ist relativ klar: Es läuft jetzt ein weiterer Prozess, der noch mal das gleiche tut wie der erste Prozess. Der bremst in der Regel den ersten Prozess noch weiter aus und läuft selbst auch langsamer, da er mit dem ersten Prozess konkurriert. Nach 15 Minuten kommt dann der nächste Prozess dazu, alles wird noch langsamer, …

Deshalb immer dafür Sorgen, dass es nur einen einzigen Versuch gibt:
wget --tries=1 --spider http://www.example.com/cronjob.php

Oder alternativ:
curl http://www.example.com/cronjob.php

cURL setzt standardmäßig auf „Nicht wieder Versuchen„.

10 Milliarden Fotos @ Facebook

Da bastelt man grad am großen Server-Umbau, und dann kommt da so eine Meldung von Facebook:

Here’s some other interesting recent stats on photos:

  • 2-3 Terabytes of photos are being uploaded to the site every day
  • We have just over one petabyte of photo storage
  • We serve over 15 billion photo images per day
  • Photo traffic now peaks at over 300,000 images served per second

Da fühlt man sich dann plötzlich wieder ganz klein…

Lustiges Server-Basteln

Wir sind ja (mal wieder) mitten im Umbauen unserer Server-Struktur. Dieses mal hoffentlich vorerst zum letzten mal – jedenfalls haben wir inzwischen alle Hardware, die wir gern von anfang an gehabt hätten.

Ab heute läuft mein Blog auf zwei getrennten Servern – einer, der die Webseite „ausführt“ (also der Webserver) und einem, der die Datenbank hält (also dem Datenbankserver). Mal sehen, ob das jetzt weitgehend funktioniert. Aber ich bin zuversichtlich 🙂

Ab mitte des Monats wollen wir dann unsere neuen Webserver in Betrieb nehmen, die sich die Last teilen – und noch wichtiger: Die gegenseitig einspringen, wenn einer der Server mal ausfallen sollte.

Und: Nein, das ist nicht primär für meinen Blog, sondern für unsere anderen Webseiten relevant. Der Blog ist da nur ein Nutznießer.