Das Standardverhalten von WordPress' wp-cron.php besteht darin, bei jedem Besuch im Hintergrund zu prüfen, ob „eine Aufgabe ansteht“. Bei Websites mit wenig Traffic ist das unproblematisch, bei Websites mit viel Traffic oder umgekehrt ganz ohne Besucher führt es jedoch zu ernsten Problemen:
-
Leistungsverlust: Die Cron-Prüfung bei jedem Seitenaufruf belastet den Server unnötig.
-
Sicherheitsrisiko:
wp-cron.phpkann von außen ausgelöst werden; Angreifer können Ihre Website mit gefälschten Anfragen ausbremsen (DoS-Angriff). -
Zeitplanfehler: Besucht niemand Ihre Website, werden geplante Beiträge nicht veröffentlicht und Backups nicht gestartet.
Hier die Konfiguration mit einem „echten Cron“, die das Problem grundlegend löst:
Schritt 1: Cron in WordPress deaktivieren
Zuerst verhindern wir, dass WordPress bei jedem Besuch den Cron prüft. Fügen Sie dazu in Ihre wp-config.php-Datei diese Zeile ein:
define( 'DISABLE_WP_CRON', true );
Schritt 2: Cronjob auf dem Server anlegen
Jetzt lassen wir den Server (Plesk oder cPanel) diese Aufgabe alle 5 oder 10 Minuten automatisch ausführen.
Wenn Sie Plesk nutzen:
-
Websites & Domains > Geplante Aufgaben (Scheduled Tasks): Öffnen Sie diesen Bereich.
-
Aufgabe hinzufügen: Klicken Sie darauf.
-
Aufgabentyp: Wählen Sie „PHP-Skript ausführen“.
-
Skriptpfad:
httpdocs/wp-cron.php: Wählen Sie diese Datei aus. -
PHP-Version: Wählen Sie die PHP-Version Ihrer Website.
-
Zeitplan: Wählen Sie „Minütlich“ und tragen Sie
*/5(alle 5 Minuten) oder*/10ein.
Wenn Sie cPanel nutzen (Cron Jobs):
Stellen Sie den folgenden Befehl unter „Common Settings“ so ein, dass er alle 5 Minuten läuft:
wget -q -O - https://ihreseite.de/wp-cron.php?doing_wp_cron >/dev/null 2>&1
Zusätzliche Sicherheitsmaßnahme (.htaccess)
Wenn Sie einen echten Cronjob eingerichtet haben, können Sie verhindern, dass Bots oder Angreifer diese Datei von außen manuell auslösen. Fügen Sie Ihrer .htaccess-Datei Folgendes hinzu:
# Externen Zugriff auf wp-cron.php sperren
<Files wp-cron.php>
order allow,deny
deny from all
# Wenn Sie die Server-IP kennen (optional):
# allow from 1.2.3.4
</Files>
