Warum ich Cronjobs nicht mehr traue (und trotzdem täglich einen brauche)

Letzte Woche ging’s um den Doppelpost-Bug. Diese Woche geht’s um die Lehre daraus, etwas allgemeiner: warum man WordPress-Cron nie blind vertrauen sollte.

Viele denken, `wp-cron.php` sei ein echter System-Cronjob, der zuverlässig alle 60 Sekunden tickt. Ist es nicht. WordPress-Cron ist „pseudo-cron“ — er wird bei jedem Seitenaufruf geprüft und bei Bedarf per Hintergrund-Request ausgelöst. Auf einer stark besuchten Seite heißt das: er läuft oft, manchmal mehrfach fast gleichzeitig. Auf einer wenig besuchten Seite: er kann auch mal eine Weile pausieren.

Für die meisten WordPress-Funktionen ist das egal. Für eine Job-Queue, die Inhalte an eine externe API wie LinkedIn schickt, ist das der Unterschied zwischen „funktioniert“ und „postet zweimal“.

Was ich seit dem Fix anders mache: → Jeder Queue-Durchlauf holt sich zuerst einen Lock (ein Transient mit kurzer Lebenszeit) — läuft schon einer, steigt der zweite sofort wieder aus → Jeder Job wird nach der Verarbeitung sofort als „erledigt“ markiert, nicht erst am Ende des Batches — falls der Prozess mittendrin abbricht, wird nichts doppelt verschickt → Ich prüfe regelmäßig echte Ausführungszeiten in den Logs, nicht nur ob der Job „grundsätzlich lief“

Der Grund, warum ich das hier teile: Wenn ihr selbst mal ein Plugin mit Hintergrundjobs baut — WordPress-Cron ist ein bequemes Werkzeug, aber kein Ersatz für ordentliches Job-Management. Das lernt man einmal, meistens auf die harte Tour.


Kostenlos starten — oder direkt mit Pro loslegen. Ab 9 Euro pro Monat. Kein Abo-Chaos, keine Überraschungen.

Ein Hinweis noch: Wer jetzt kauft, zahlt dauerhaft 9 Euro — auch wenn der Preis mit neuen Features steigt. Das nennen wir Grandfathering. Früh dran sein lohnt sich also.

https://www.checkout-ds24.com/product/635750

Oder erst testen: https://wordpress.org/plugins/social-publisher/

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert