WordPress verfügt über ein eigenes System namens WP-Cron, um zeitgesteuerte Aufgaben zu erledigen. WP-Cron ist aber natürlich kein aktiver Prozess und kann in Wirklichkeit nicht selbständig zu einer bestimmten Zeit seine Arbeit aufnehmen.

Stattdessen verlässt sich das System darauf, dass die Seite regelmäßig von Besucherinnen und Besuchern abgerufen wird. Jedes Mal, wenn jemand Inhalte der Domain abruft, wird neben den „normalen“ PHP-Skripten auch WP-Cron aktiviert und prüft, ob irgend etwas zur Erledigung ansteht.

Wer das weiß, kann sich natürlich auch recht einfach ausmalen, wo eine der größten Schwachstellen von WP-Cron liegt: Zu besucherlosen Zeiten blieben die terminisierten Aufgaben schlichtweg liegen. Andererseits verursacht der permanente Aufruf von WP-Cron mit jedem Besuch bei Seiten unter hoher Trafficlast völlig unnötigen zusätzlichen Ressourcenverbrauch.

Gelegentlich hört WP-Cron auch einfach auf zu arbeiten, zum Beispiel aufgrund von Konflikten zwischen verschiedenen WordPress-Plugins, Problemen mit der DNS-Konfiguration, bei Verwendung bestimmter Caching-Plugins oder extremer Serverlast. In dem Fall kann WordPress ebenfalls weder notwendige Wartungsarbeiten, noch Backups oder andere regelmäßige Aufgaben erledigen.

Eine Möglichkeit, solche Probleme zu umgehen ist, WP-Cron zu deaktivieren und stattdessen die Kontrolle über zeitabhängige Aufgaben in die Hände des Webservers zu legen, also echte Cronjobs einzurichten.

Im ersten Schritt muss dazu die Datei wp-config.php um folgende Zeile erweitert werden:

define('DISABLE_WP_CRON', true);

Die Konfigurationsdatei findet sich auf dem Webserver in dem Verzeichnis, in welches WordPress installiert wurde. Wichtig ist zu beachten, dass der Eintrag vor der Zeile „Thats all, stop editing!“ stehen muss.

Als nächstes wird natürlich noch ein passender Cronjob benötigt. Wie dieser eingerichtet wird, unterscheidet sich von Server zu Server. Die meisten Webhoster bieten über ihre Weboberfläche zur Serververwaltung die Möglichkeit, entsprechende Einträge zu erstellen.

Fehlt diese, bzw. bei vollständig selbst verwalteten Rootservern mit Linux als Betriebssystem wird der Aufruf händisch in die Datei /etc/crontab eingetragen. Dazu sind aber grundlegende Vorkenntnisse zur Syntax der Datei notwendig.

Es gibt auch verschiedene Arten, wie der Cron-Demon des Servers letztendlich die Aufgaben abrufen soll. Ein Beispiel wäre:

wget -q -O - http://yourwebsite.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1

Statt Yourwebsite ist natürlich der eigene Domainname einzutragen. Mit dem Befehl wird Cron angewiesen, in den festgelegten Abständen (eine vernünftige Zeitspanne wäre z.B. jede volle oder halbe Stunde) mittels Wget die Datei wp_cron.php herunterzuladen und auszuführen.

Damit sollten dann alle Aufgaben von WordPress verlässlich zur vorgesehenen Zeit abgearbeitet werden, ohne den Server mehr als nötig zu belasten. Manche Plugins (z.B. Updraft-Plus) geben nach der Umstellung eine Fehlermeldung aus, weil sie erkennen, dass WP-Cron deaktiviert ist, sofern der neue Cronjob getestet wurde und funktioniert, kann man diese aber getrost ignorieren.