Artikel vom 10. November 2009

Performance in WordPress: Cronjobs begutachten und bereinigen

Cronjob

Seit der Version 2.1 ist WordPress in der Lage, angelegte Cronjobs nativ, also losgelöst von Drittapplikationen, auszuführen. Diese großartige Funktionalität, wiederholte Aufgaben direkt im Blog-System zu hinterlegen und zu verwalten, wird von Plugin-Entwicklern gerne und oft genutzt – Web-Hoster und externe Cronjob-Anbieter stellen für Blogger keine lästige Abhängigkeit mehr dar. Doch “Leichen” in der Cronjob-Kartei bedeuten auch Risiken.

Ein Mysterium: Cronjobs unter WordPress
Wie Cronjobs in WordPress zu potentieller Gefahr mutieren können, ist auf den ersten, oberflächlichen Blick nicht ersichtlich. Eine winzige Portion Fachwissen schafft die nötige Abhilfe und hilft zum Verständnis: Bei wirklich jedem Aufruf der Blogseiten prüft WordPress im Hintergrund, welche systematische Tasks angelegt sind und zu welchen Zeiten sie ausgeführt werden sollen. Simple Definition dieser Funktionsweise: Der Besucher des Blogs stößt die anstehenden Cronjobs an.

WP-Control für WordPress Cronjobs
Unter “Werkzeuge > Control” niestet sich das Tool ein

Und da jeder Seitenaufruf sich um die Prüfung und die Ausführung der vom System und den Plugins gespeicherten Aufgaben kümmert, sollte die Liste der Cronjobs so klein wie möglich gehalten werden. Dabei ganz wichtig zu beachten: Dort möglichst keine Duplikaten, keine Tasks von längst entfernten Plugins.

Wiederholte Aufgaben einsehen und verwalten
Das WordPress Plugin WP-Crontrol gewährt eine ausführliche Einsicht unter die Haube des Cronjob-Mechanismus und listet vorrätige Aufgaben detailliert auf. In der Standard-Auslieferung bringt das Blogsystem bereits 3 Einträge mit (wp_version_check, wp_update_themes, wp_update_plugins), die dafür Sorge tragen, den Blog-Administrator zeitnah auf eventuell existente Aktualisierungen des WP-Kerns und der installierten Erweiterungen zu informieren. Diese bitte unberührt lassen, sind aber auch notfalls schreibgeschützt.

Deaktivieren, bereinigen, clean
Sonstige Cronjobs in der Liste stammen von ehemaligen oder eben aktuellen Erweiterungen wie Plugins und Themes. Die Amtspflicht des Administrators an dieser Stelle: Liste auf mögliche “Leichen” und “Wiederholungstäter” durchschauen. Effizienter Tipp: Aktive Plugins deaktivieren, Einträge aus der Tabelle mit Cronjobs löschen (Standard-Items ausgenommen), notwendige Plugins wieder in Betrieb nehmen. In diesem Schritt werden Cronjobs von aktiven Plugins erneut initialisiert, so dass die Liste nur intakte Werte aufweisen müsste. Doppelte, unbrauchbare Daten landen in Nirwana – eine Erleichterung für WordPress, da gleiche Jobs nicht mehrfach aufgerufen werden müssen. Der Aufruf der Todos mit nicht existenten Zielen entfällt und bringt spürbare Performance.

Aufgeräumte Liste der Cronjobs in WordPress
Aufgeräumte Liste der Crontabs in WordPress

Fazit
Im Laufe der Zeit verschlucken sich die Plugins gern – mehrere Instanzen in der Cronjob-Tabelle ist die resultierende Bilanz. Beim Deinstallieren der Erweiterungen “denkt” kaum ein Plugin an das pflichtbewusste Aufräumen der initialisierten Aufgaben – kann ebenfalls passieren. Daher die Empfehlung: Der Blog-Administrator sollte alle 3 – 4 Monate, je nach Plugin-Aktivität im Backend, die Auflistung der Cronjobs kritisch unter die Lupe nehmen und Parasiten mit einfachen Klicks eliminieren.

Sergej Müller

[Der Autor] Sergej Müller ist enthusiastischer Software Engineer mit Schwerpunkten Webentwicklung und WordPress. Seit 2007 programmiert und vertreibt er wpSEO, das weltberühmte und patentierte SEO-Plugin für WordPress-Blogs.

8 Kommentare zum Artikel

#1 Thorsten am 11. November 2009 um 07:53

Guter Tipp … vielen Dank dafür. Bei mir sind es 6 Stück .. also OK :)
Ein kleiner Hinweis, da es sonst vielleicht zu Verwirrung führt: das Plugin heisst WP-Crontrol also Cro.. und nicht WP-Control.
Viele Grüsse
Thorsten

#2 Sergej Müller am 11. November 2009 um 09:00

Thorsten, hast du Recht. Hab mich um einen Buchstaben verschrieben. Vielen Dank.

Sergej Müller
#3 Heiko am 11. November 2009 um 10:11

Hallo Sergej,

vielen Dank für den Tipp. Habe seit einiger Zeit mit einem sehr langsamen Blog zu kämpfen und finde den Fehler nicht. Die Seite lädt sehr lange bevor sich der Inhalt aufbaut.

Cronjobs hätten wirklich ein logischer Grund dafür gewesen sein können, aber das Plugin listet nur 3 Jobs auf. Das kann es also nicht sein.

Hast du vielleicht noch mehr Tipps zu Performance vor dem eigentlich Aufbau der Seite?

#4 Lazy am 11. November 2009 um 13:54

sehr guter Tipp, kann ich mich Thorsten nur anschließen.

#5 Sergej Müller am 11. November 2009 um 20:30

@Heiko
Es können zig Faktoren dafür verantwortlich sein. Ich würde mit dem Abschalten der Plugins anfangen…

Sergej Müller
#6 Lazy am 20. November 2009 um 07:26

eine sache wie wp-crontrol sollte irgendwann in den wp core einfließen, find ich..

ps: gibt es eigentlich eine möglichkeit, die cronjobs von wp / plugins per crontab erledigen zu lassen (?)

#7 Sergej Müller am 20. November 2009 um 09:24

@Lazy
Ich vermute ganz stark, wenn die Liste der Cronjobs jedem ohne jegliche Plugins zugänglich wäre, könnte unbewusst viel Unsinn getrieben werden. Aber kommt vielleicht noch, wie die in WordPress 2.9 eingeführt DB-Repair-Funktion zeigt.

Sergej Müller
#8 Lazy am 20. November 2009 um 09:36

Hi Sergej

vermutlich hast du recht, war nur so eine spontane Idee, denn per Cronjob (richtigem vom Server aus) fände ich es eigentlich eleganter, auch wenn es WP natürlich seit einiger Zeit besser gelöst hat.

Mal sehen was so kommt, bin eh immer neugierig und interessiert, was sich bei WordPress so tut ;)

Liebe grüße & danke für die Antwort

schönes WE!

Chris

5 Verlinkungen auf den Artikel

› Webmaster, Security und Technik Blog

› WordPress Crons löschen – bueltge.de [by:ltge.de]

› Crazy Girls Tipps

› SoftHelp » Blog Archive » 20 x Statistik für WordPr [...]

› 20 x Statistik für WordPress & Co. | Oberlehrer