CRON-Jobs dienen dazu, Aufgaben auf deiner WordPress-Website zu festgelegten Zeiten, Daten oder in festgelegten Intervallen zu planen. Beispiele für einen WordPress-CRON-Job sind beispielsweise die Planung der Veröffentlichung eines Beitrags, die Suche nach Updates oder die Ausführung eines Backup-Plugins nach einem vordefinierten Zeitplan.

In WordPress wird dies von WP-Cron übernommen, das dazu dient, einen System-Cron zu simulieren. Je nach Traffic auf deiner Website kann die Nutzung des integrierten Cron-Handlers jedoch tatsächlich die Ladezeiten deiner Seiten beeinträchtigen.

Deshalb zeigen wir dir heute, wie du WP-Cron (wp-cron.php) deaktivierst und stattdessen einen System-Cron nutzt, um die Leistung zu steigern.

Warum WP-Cron deaktivieren?

Bei Kinsta betreuen wir viele stark frequentierte und anspruchsvolle Websites. Aus diesem Grund haben wir zahlreiche Leistungsprobleme mit dem in WordPress integrierten Cron-Handler – WP-Cron – festgestellt.

Zunächst einmal ist es wichtig zu verstehen, dass WP-Cron kein echter Cron-Job ist, sondern lediglich eine von WordPress entwickelte Funktion, die die Funktionsweise eines System-Cron nachahmt.

WP-Cron läuft nicht kontinuierlich. Standardmäßig wird der wp-cron.php bei jedem Seitenaufruf ausgelöst, was auf stark frequentierten Websites zu Problemen führen kann. Wenn eine Website nicht über genügend PHP-Threads verfügt, kommt es manchmal vor, dass eine Anfrage eingeht, WordPress den Cron-Job startet, dieser aber auf den Worker warten muss und daher einfach untätig bleibt.

Das umgekehrte Szenario trifft ebenfalls zu. Wenn eine Website kaum Traffic erzeugt, könnten Termine verpasst werden, weil niemand eine Seite geladen hat.

Außerdem gibt es auch einen Sicherheitsgrund, WP-Cron zu deaktivieren. Da wp-cron.php eine öffentlich zugängliche Datei ist, kann jeder sie auslösen, indem er eine Anfrage an https://yourdomain.com/wp-cron.php sendet.

Auf einer Ziel-Website kann dies genutzt werden, um die Serverauslastung wiederholt in die Höhe zu treiben – eine einfache, aber effektive Methode, um eine Website zu verlangsamen oder zu destabilisieren. Das Deaktivieren von WP-Cron schließt diese Lücke vollständig.

WP-Cron in WordPress deaktivieren (2 Schritte)

Hier ist, was du tun solltest (in dieser Reihenfolge):

  1. Richte zunächst einen Cron-Job auf Serverebene ein, um WP-Cron zu ersetzen
  2. Deaktiviere anschließend WP-Cron in deinem wp-config.php

Wenn du WP-Cron zuerst deaktivierst, ohne einen Ersatz einzurichten, werden deine geplanten Aufgaben (Beitragsplanung, Backup-Jobs, Plugin-Update-Prüfungen, E-Mail-Benachrichtigungen) stillschweigend nicht mehr ausgeführt. Keine Fehlermeldungen, nur ausgefallene Jobs.

Schritt 1: Richte einen Cron-Job auf Serverebene ein

Da du nun verstehst, warum WP-Cron ein Problem darstellen kann, erfährst du hier, wie du es ersetzen kannst. Der System-Cron läuft nach einem vordefinierten Zeitplan und wird sogar im offiziellen Plugin-Handbuch empfohlen.

Wähle die Methode, die zu deiner Hosting-Konfiguration passt.

Mit cPanel

Wenn du einen Host mit cPanel nutzt, kannst du über das Control Panel einen System-Cron-Job erstellen. Melde dich zunächst bei cPanel an. Klicke im Bereich „Erweitert“ auf „Cron-Jobs“.

cPanel-Cron-Jobs
cPanel-Cron-Jobs

Im Abschnitt „Neuen Cron-Job hinzufügen“ kannst du aus einer Reihe verschiedener vordefinierter Zeitpläne wählen, zum Beispiel zweimal pro Stunde oder einmal pro Woche. Dein Hosting-Anbieter hat höchstwahrscheinlich eine Begrenzung dafür, wie oft Cron-Jobs ausgeführt werden dürfen. Zweimal pro Stunde ist eine übliche Einstellung bei Shared-Hosting-Anbietern.

cPanel-Cron-Job-Einstellungen
cPanel-Cron-Job-Einstellungen

Füge den folgenden Befehl hinzu. Ersetze https://domain.com durch deinen Domainnamen. Dieser Befehl kann je nach Konfiguration deines Hostings leicht variieren. Klicke anschließend auf „Neuen Cron-Job hinzufügen“.

wget -q -O - https://domain.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
cPanel neuen Cron-Job hinzufügen
cPanel neuen Cron-Job hinzufügen

Der Teil >/dev/null 2>&1 im obigen Befehl deaktiviert E-Mail-Benachrichtigungen.

Verwendung von SSH und Crontab

Wenn du SSH-Zugriff auf deinen Server hast, kannst du den Cron-Job direkt in der Crontab deines Servers einrichten. Das funktioniert auf jedem Linux-basierten Server, unabhängig von deinem Control Panel.

Verbinde dich per SSH und führe Folgendes aus:

crontab -e

Füge dann eine der folgenden Zeilen hinzu (wähle eine aus).

Mit wget (funktioniert auf jedem Server):

*/15 * * * * wget -q -O - https://yourdomain.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1

Direkte Verwendung von PHP (etwas schneller, kein HTTP-Overhead):

*/15 * * * * php /path/to/wordpress/wp-cron.php >/dev/null 2>&1

Ersetze yourdomain.com und /path/to/wordpress durch deine tatsächliche Domain und den Installationspfad von WordPress. Der */15 führt den Cron-Job alle 15 Minuten aus – eine gute Standardeinstellung für die meisten Websites.

Mit WP-CLI

Wenn du WP-CLI verwendest, ist dies oft die sauberste Methode. Der in WP-CLI integrierte Cron-Befehl führt nur die tatsächlich fälligen Ereignisse aus, was effizienter ist als der direkte Aufruf von wp-cron.php. Füge dies über crontab -e zu deiner crontab hinzu:

*/15 * * * * cd /path/to/wordpress && wp cron event run --due-now --allow-root >/dev/null 2>&1

Du kannst WP-CLI auch nutzen, um deine geplanten Ereignisse jederzeit einzusehen, ohne sie auszuführen:

wp cron event list

Das ist nützlich für die Fehlerbehebung. Es zeigt jedes anstehende Cron-Ereignis an, wann es ausgeführt werden soll und an welchen Hook es angehängt ist.

Verwendung eines Drittanbieter-Tools

Wenn du dich mit der Einrichtung von Cron-Jobs auf deinem Server nicht auskennst oder dein Hosting-Anbieter keinen Zugriff darauf gewährt, kannst du auch eine Drittanbieter-Lösung wie EasyCron nutzen.

Wichtig: WordPress-Multisite-Netzwerke

In einem Multisite-Netzwerk läuft das etwas anders ab.

WP-Cron muss für jede Unterseite einzeln ausgeführt werden, nicht nur für die Hauptseite. Wenn du einen einzigen Server-Cron einrichtest, der auf wp-cron.php auf der Hauptdomain verweist, werden Cron-Jobs für Unterseiten auf anderen Domains oder in anderen Unterpfaden möglicherweise nicht zuverlässig ausgelöst.

Die sauberste Lösung ist die Verwendung von WP-CLI, das Multisite nativ unterstützt:

*/15 * * * * cd /path/to/wordpress && wp cron event run --due-now --url=https://yourdomain.com --allow-root >/dev/null 2>&1

Bei Netzwerken mit vielen Unterseiten kannst du alle nacheinander durchlaufen, indem du Folgendes verwendest:

*/15 * * * * cd /path/to/wordpress && wp site list --field=url | xargs -I % wp cron event run --due-now --url=% --allow-root >/dev/null 2>&1

Die Konstante DISABLE_WP_CRON in wp-config.php funktioniert bei Multisite genauso: Füge sie einmal hinzu, und sie gilt für das gesamte Netzwerk.

Schritt 2: Deaktiviere WP-Cron in der wp-config.php

Um WP-Cron zu deaktivieren, füge Folgendes in deine wp-config.php-Datei ein, direkt vor der Zeile, die lautet: „Das war’s, beende die Bearbeitung! Viel Spaß beim Bloggen.“

define('DISABLE_WP_CRON', true);
WP-Cron deaktivieren
WP-Cron deaktivieren

Speichere die Datei – fertig. WP-Cron wird beim Laden der Seite nicht mehr ausgelöst.

Diese Konstante verhindert, dass WP-Cron beim Laden der Seite ausgeführt wird. Sie verhindert jedoch nicht, dass wp-cron.php direkt aufgerufen wird. Dein in Schritt 1 eingerichteter Server-Cron-Job kann es weiterhin wie erwartet auslösen.

So überprüfst du, ob alles funktioniert

Nachdem du beide Schritte abgeschlossen hast, solltest du überprüfen, ob WP-Cron tatsächlich deaktiviert ist und ob dein Server-Cron-Job korrekt ausgeführt wird.

Option 1: Verwende das WP Crontrol-Plugin

Installiere und aktiviere das kostenlose WP-Control-Plugin. Gehe in deinem WordPress-Dashboard zu Extras → Cron-Ereignisse. Dort siehst du eine Liste aller geplanten Ereignisse. Wenn WP-Cron ordnungsgemäß deaktiviert ist, sollten keine Ereignisse mehr bei jedem Laden der Seite ausgelöst werden, sondern nur noch in den Intervallen, in denen dein Server-Cron-Job läuft.

Option 2: Über WP-CLI prüfen

Führe diesen Befehl auf deinem Server aus:

wp cron event list

Dadurch werden alle anstehenden Cron-Ereignisse mit ihrer nächsten geplanten Ausführungszeit angezeigt. Wenn die Liste normal aussieht und die Ereignisse zwischen den Durchläufen gelöscht werden, funktioniert deine Konfiguration.

Option 3: Überprüfe deine Server-Logs

Wenn du einen crontab-Eintrag eingerichtet hast, kannst du dessen Ausgabe vorübergehend in eine Protokolldatei umleiten, um zu überprüfen, ob er ausgeführt wird:

*/15 * * * * wget -q -O - https://yourdomain.com/wp-cron.php?doing_wp_cron >> /tmp/wpcron.log 2>&1

Überprüfe nach 15 Minuten die Datei /tmp/wpcron.log, um sicherzustellen, dass der Job ausgeführt wurde. Sobald dies bestätigt ist, entferne die Protokollumleitung.

Zusammenfassung

Das Deaktivieren von WP-Cron und dessen Ersatz durch einen echten Cron-Job auf Serverebene ist eine einfache Änderung, die die Zuverlässigkeit verbessert, den Overhead reduziert und einen unnötigen öffentlichen Endpunkt beseitigt.

Oder du kannst den Großteil der Einrichtung komplett überspringen, indem du einen Host wählst, der das für dich übernimmt. Managed-Anbieter wie Kinsta führen standardmäßig alle 15 Minuten einen serverseitigen Cron-Job aus, sodass du lediglich WP-Cron deaktivieren musst und die Plattform sich um den Rest kümmert.

Brian Jackson

Brian hat eine große Leidenschaft für WordPress, verwendet es seit über einem Jahrzehnt und entwickelt sogar einige Premium-Plugins. Brian liebt Blogging, Filme und Wandern. Verbinde dich mit Brian auf Twitter.