WordPress Cron Events komplett löschen und offene WP-Cron-Events prüfen

Wie man Wordpress Cron Einträge prüfen und löschen kann, zeige ich euch in dieser Anleitung.

Heute hatte ich mal wieder den Fall, dass ich eine WordPress Seite eines Kunden hatte, die trotz Hosting auf einem “managed Server” quälend langsam lief. Beim Aufruf des WP-Admin konnte man sehen, dass er immer wieder auf die Datei wp-cron.php zugegriffen hat und die Admin-Seiten haben sich teilweise in Zeiten zwischen 30 Sekunden und 2 Minuten aufgebaut. Der Speicherbedarf lag mit über 200 MB RAM auch recht hoch. Alles Indizien, dass da irgendwas nicht ganz rund lief.

Was ist WP Cron?

WP Cron ist eine Art interner Cronjob, den WordPress nutzt, um regelmässig Säuberungsaufgaben durchzuführen und Verwaltungsscripte laufen zu lassen. Bei WordPress-Seiten, die wenige Besucher haben, kann es vorkommen, dass WordPress durch die wenigen Aufgaben nicht dazu kommt, die Cronjobs oft genug durchlaufen zu lassen. In den meisten Fällen ist dies jedoch selten der Fall, da nur wenigen regelmässige Aufgaben in der WP-Cron-Liste stehen. Diese werden dann schon beim Aufruf des WP-Admin-Bereichs erledigt.

Wie man WordPress Cron Einträge prüfen und löschen kann, zeige ich euch in dieser Anleitung.

Wie man WordPress Cron Einträge prüfen und löschen kann, zeige ich euch in dieser Anleitung.

Liste der WP Cron Events einsehen

Mein Verdacht war, dass WordPress im Hintergrund sehr viele Cronjobs abarbeiten muss, die dann immer bei normalen Aufrufen des Admins mit erledigt werden. Nun bietet WordPress selbst keine Möglichkeit, diese Liste der Cron-Events einzusehen, aber mit dem Plugin “WP-Crontrol” bekommt man eine Liste im Admin-Bereich, die einem Auskunft über die einzelnen Tasks gibt, die derzeit noch in der Warteschlange des WP-Cron stehen. Dies sieht zum Beispiel so aus:

Liste der WP-Cron-Events prüfen: Dies sieht mit dem Plugin WP-Crontrol beispielsweise so aus.

Liste der WP-Cron-Events prüfen: Dies sieht mit dem Plugin WP-Crontrol beispielsweise so aus.

Im Falle der extrem langsamen WordPress-Installation standen in der Liste über 40.000 Einträge die von dem Plugin “Huge-IT-Gallery” erzeugt wurden und die dazu auch noch stetig mehr statt weniger wurden. Das Plugin WP-Crontrol bietet zwar eine Auflistung der ganzen Cron-Events an und man kann diese auch einzeln über einen Button löschen, aber bei über 40.000 Einträgen musste eine “umfassendere” Lösung her.

Löschen aller WP-Cron-Einträge mit einem Mal

Das Internet bietet zum Glück vielfältige Informationsmöglichkeiten und so bin ich auf den Befehl »delete_option( ‘cron’ );« gestossen, der alle Einträge in der Tabelle wp_options löscht, die zum Bereich “cron” passen.

delete_option( 'cron' );

Damit werden mit einem Schlag alle vorhandenen Cron-Events gelöscht, die WordPress aktuell in der Warteschlange hat. Damit der Befehl ausgeführt wird, muss man ihn im Theme in die Datei “functions.php” einbauen. Dann eine beliebige WordPress-Seite im Frontend aufrufen und danach die Zeile wieder löschen. Wenn das Theme keine “functions.php” Datei hat, kann man es auch in die headerphp, footer.php oder sonstige Dateien kopieren, die beim Aufruf der WordPress-Seite ausgeführt werden.

Hier im Screenshot sieht man, wo der Befehl zum Löschen aller WP-Cron-Einträge eingefügt werden kann. In meinem Fall wurde es kurzzeitig in die functions.php im Ordner des aktuellen Themes eingebaut und dann wieder gelöscht.

Hier im Screenshot sieht man, wo der Befehl zum Löschen aller WP-Cron-Einträge eingefügt werden kann. In meinem Fall wurde es kurzzeitig in die functions.php im Ordner des aktuellen Themes eingebaut und dann wieder gelöscht.

Korrektur des “Übeltäters”

Nachdem nun alle Cron-Events gelöscht waren, lief WordPress wieder richtig flott. Zur Kontrolle habe ich mir wieder die Liste der Cron-Events mit WP-Crontrol angeschaut und gesehen, dass stetig neue Einträge von dem Huge-IT-Gallery Plugin hinzu kommen. Es wäre als nur eine Frage der Zeit, bis wieder alles ausgebremst wird.

Da das Plugin weiterhin benötigt wurde, habe ich mich einfach im Quellcode des Plugins auf die Suche nach dem String “cron” gemacht und die entsprechenden Zeilen auskommentiert, die dafür gesorgt haben, dass neue Cron-Events für WP-Cron angelegt wurden. So ist die WordPress Installation nun dauerhaft bereinigt und schön, schnell.

Du brauchst Wordpress Support?

Ich beschäftige mich seit vielen Jahren täglich mit Wordpress und habe schon etliche Webseiten mit den unterschiedlichsten Herausforderungen über Wordpress realisiert. Wenn du Hilfe bei der Pflege und beim Updaten deines Blogs benötigst oder kurzzeitigen Support bei einem akuten Problem (langsames Wordpress, weisser Bildschirm, Fehlermeldungen etc) brauchst, dann helfe ich dir gerne weiter!

 

 

Sir Apfelot auf SteadyHQ unterstützen

6 Kommentare

  1. Heike sagt:

    Hallo,
    das klingt ja einfach – prima!
    Aber: wenn ich einfach ALLE cron-jobs lösche, kann es da nicht zu Problemem kommen mit cron-jobs die ich gehalten möchte?
    Werden die cron-jobs der anderen Plugins einfach wieder neu angelegt?

    Vielen Dank für eine Info & viele Grüße
    Heike

  2. Ricardo sagt:

    Hallo wenn ich dazu ein kleine, hoffentlich nicht zu komplexe Frage stellen darf. Mein WordPress-Plugin zum Newsletterversand (“The Newsletter”) gibt mir immer eine Warnung: “The WodPress internal schedule is not triggered enough oft. […]” in dessen Statusanzeige sind alle Punkte positiv bis auf der Punkt “Cron calls” der hat die Meldung “the blog cron system is NOT triggered enough often Trigger interval: average 423 s, max 1550 s, min 12 s”

    Hab mir, wie von die beschrieben, das ganze in WP-Control angesehen und da wird das Ereigniss im 5 Min takt ausgeführt.

    Hast du nen Ansatz wonach ich googlen könnte? oder kennst du so ein Verhalten und hast direkt nen Ansatz?

    Vielen Dank schonmal

    • Sir Apfelot sagt:

      Hallo Ricardo! Bei dir sind vermutlich zuwenige Besucher auf dem Blog, um den Cronjob zuverlässig ausführen zu können. WordPress nutzt quasi immer Besucher, um den Cronjob nebenbei mit abzuarbeiten. Die Einstellung von 5 Minuten ist in der Tabelle vorgesehen, darum zeigt es WP-Control auch so an, aber es wird einfach nicht ausgelöst. Die Lösung ist aber ziemlich einfach: Du registrierst dich bei einem externen Cronjob-Service wie DoTheJob.de oder andere (oder nutzt den Cronjob vom Hosting) und rufst die wp-cron.php darüber automatisch alle 2-5 Minuten auf. Die komplette URL ist dann zum Beispiel https://www.sir-apfelot.de/wp-cron.php – nur eben mit deiner Domain. VG! Jens

  3. Jens sagt:

    Hallo,
    prima Plugin, danke! Baue gerade den cronjob einer Seite auf den Servergestützten Aufruf, also mit deaktiviertem WordPress-Cron.
    Da hat mit das Plugin gute Dienste geleistet.
    Gruß, Jens

Schreibe einen Kommentar

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