Ein Job für die Krone

Ein Job für die Krone

Der zweite Tag mit fever. Allein schon vor dem Hintergrund, dass es gestern Nachmittag erneut bei feedly einen DDoS-Angriff gab, ebenso wie heute, war die Entscheidung für eine andere Lösung goldrichtig. In den letzten 30 Stunden konnten sich fever und ich aneinander gewöhnen. Für mich die wohl wichtigste Erkenntnis ist die, dass man für fever unbedingt Cronjobs einrichten sollte. Ohne die werden die Feeds auf dem Server nur dann aktualisiert, wenn es eine Anfrage durch einen Client gibt. Das dauert dann mitunter nicht nur länger, sondern je nach Client muss man dafür auch noch extra etwas anstoßen (zum Beispiel bei Mr. Reader).

Seitens fever gibt es extra eine URL, über die die Aktualisierung angestoßen werden kann. Als ideal hat sich ein Rhythmus von jeweils 15 Minuten herausgestellt. Mit anderen Worte: alle 15 Minuten wird fever dazu gebracht, nach aktuellen Feeds zu schauen. Mein Problem dabei ist eine Limitierung der Cronjobs beim Provider. Ich kann einen Cronjob zwar auf 5 Minuten genau angeben, aber dieser wird dann maximal einmal am Tag ausgeführt. Um alle 15 Minuten eine Aktualisierung zu erhalten, müsste ich 96 Cronjobs anlegen. Das ist extrem unhandlich und mühselig. Zudem weiss ich gar nicht, ob ich überhaupt so viele anlegen darf.

Meine erste Überlegung bestand daher darin, auf Grund des UNIX-Unterbaus von MAC OS X (wir erinnern uns, die Sache mit dem X…) auf meinem lokalen Rechner einen Cronjob laufen zu lassen. Infolge dessen beschäftigte ich mich mit dem Aufbau von Cronjobs und lernte eine Menge dazu — zwar verwenden wir in der Firma auch Cronjobs für Kundenprojekte und auch dort habe ich schon einige angelegt, aber alle 15 Minuten etwas auszuführen, war etwas neues für mich. Zudem wollte ich den Cronjob rein in der Shell anlegen, was auch deshalb nahliegend erscheint, da mein lokaler Mac kein Webinterface hat, über das ich wie im Büro Cronjobs anlegen kann. Im Terminal verwendet man bei Mac OS X den Befehl crontab. Über crontab –e kann man die Cronjobs editieren. Ungünstigerweise ist der Standart-Editor dafür VIM. Nicht meine Hausmarke, ich bevorzuge Pico — lässt sich meiner Meinung nach wesentlich besser bedienen. Wenn man etwas googelt findet man sogar heraus, wie man crontab dazu bringt, einen anderen Editor zu verwenden:

export EDITOR=pico

Damit hatte ich die erste Hürde genommen. Die Syntax für den Aufbau einer Crontab-Zeile war mir bekannt.

* * * * * Aufruf-des-Skriptes (Befehl)
| | | | |
| | | | +---- Tag der Ausführung (0 -6, Sonntag = 0)
| | | +------ Monat (1-12)
| | +-------- Tag (1-31)
| +---------- Stunde (0-23)
+------------ Minute (0-59)

Dabei steht ein Stern für „immer“. Gibt man nur Sterne ein, wird der Cronjob jede Minute ausgeführt. Ein verschwenderischer Umgang mit Ressourcen, daher würden die meisten Provider bei so was wohl allergisch reagieren. Lokal auf dem eigenen Rechner wäre das eigentlich egal gewesen. Aber ich wollte halt auch wissen, wie es richtig aussehen würde. Gibt man bei Minuten lediglich 15 an, wird der Job jede Stunde um viertel nach ausgeführt — also nur stündlich.

Ich wollte aber eine Wiederholung alle 15 Minuten. Dafür gibt es den / als Modifikator. Im Minutenfeld bedeutet entsprechen / 15 , dass der Job alle 15 Minuten ausgeführt wird, vorausgesetzt, man hat an den anderen Stellen Sterne stehen. Vollständig hätte das daher so bei mir ausgesehen:

*/15 * * * * curl -L -s curl -L -s –user-agent ‚Fever Refresh Cron‘ ‚http://meineurlzufever/?refresh‘ > /dev/null 2>&1

Dabei sorgt > /dev/null 2>&1 am dafür, dass keine Benachrichtigung über Erfolg und Misserfolg eines Cronjobs in den Mülleimer umgeleitet. Ganz praktisch, weil man ansonsten mit Mails bombardiert wird.

Ich schrieb vorhin „hätte ausgesehen“ — nicht ohne Grund. Tatsächlich habe ich die Idee mit einem lokalen Cronjob verworfen, denn ein solcher nützt mir nachts herzlich wenig. Es soll auch Tage geben, an denen ich nicht die ganze Zeit vorm Rechner hänge…
Die einfach Lösung dafür fand ich bei einer weiter Google-Suche. Es gibt Dienstleister, die kostenlose Cronjobs anbieten. Solche Angebote unterliegen zwar gewissen Einschränkungen, aber damit konnte ich mich für meinen Teil arrangieren. Empfehlenswert finde ich cronjob.de (da bin ich gelandet) und Cron-job.org. Zwar muss man sich bei cronjob.de alle acht Wochen einmal ins Webinterface einlogen, dafür erfolgt dort anscheinend aber keine Runterstufung, wenn der Cronjob mit einer Fehlermeldung vom Server fehlschlägt wie bei cron-job.org. Für mich ist das wichtig, da der Refresh von fever immer mit einer 500-Meldung vom Server quittiert wird. Höheres Timeout und mehr Memorylimit für PHP würden helfen, kann ich aber bei meinem Provider nicht anpassen.

Zusammengefasst läuft fever jetzt bei mir so wie es sollte. Daher kann ich mich ganz entspannt zurücklehnen, wenn es weiterhin Probleme mit feedly geben sollte.

Kommentar verfassen

über Thomas Boley

Geboren wurde ich im Jahre des Herren 1971 in Wesel am Niederrhein – die Kommentare an dieser Stelle bezüglich des Bürgermeisters bitte verkneifen! Mein Verhältnis zu dieser Stadt würde wohl den Umfang dieser Seite sprengen. Nur soviel sei gesagt: Es ist durchaus durchwachsen, worin es sich aber nicht von meinem Verhältnis zu Bielefeld unterscheidet. Nach dem üblichen Werdegang (Kindergarten, Schule, Abitur, Zivildienst) und den üblichen jugendlichen Irrungen und Wirrungen verschlug es mich zum Studium nach Bielefeld verschlagen. 18 Jahre später ging es dann zurück an den Rhein, in die Domstadt Köln. mehr erfahren