WP-Cron (wp-cron.php): deaktivieren und System-Cron einrichten | WordPress-Performance optimieren

In WordPress sind Cron-Jobs eine Funktion, die zu einer bestimmten Zeit oder an einem bestimmten Datum geplante Aufgaben automatisch ausführt. Sie laufen über die Datei wp-cron.php, und WordPress ruft diese Datei bei jedem Seitenaufruf auf, um geplante Aufgaben abzuarbeiten. Das ist bequem, kann auf Websites mit viel Traffic aber die Performance bremsen.
Ⅰ. Wie WP-Cron läuft und seine Performance-Probleme
Statt des klassischen Cron-Systems von Linux-Servern bringt WordPress eine eigene Cron-Funktion mit: WP-Cron. WP-Cron arbeitet über die Datei wp-cron.php: ⓐ Bei jedem Besuch der Website prüft es, ob geplante Aufgaben anstehen, und führt sie aus, und ⓑ Plugins wie Rank Math und WP Rocket führen ihre eigenen geplanten, regelmäßigen Aufgaben aus.
Auf Websites mit viel Traffic kann wp-cron.php dagegen viel zu oft aufgerufen werden und den Server überlasten. Vor allem wenn viele Nutzer gleichzeitig zugreifen, laufen Cron-Aufgaben doppelt, was zu höherer CPU-Auslastung, langsameren Antworten, langsamerem Seitenaufbau und ähnlichen Problemen führen kann.
Diese strukturellen Grenzen von WP-Cron können die Performance von WordPress drücken und vor allem auf leistungshungrigen Websites, Onlineshops und Nachrichtenportalen zu ernsten Engpässen führen.
🔄 Wie WP-Cron läuft und aufgebaut ist

Ⅱ. WordPress-Performance optimieren
Es gibt viele Wege, die WordPress-Performance zu optimieren. Nach Caching, Frontend und Datenbank lässt sich mit den WP-Cron-Einstellungen noch mehr herausholen.
Bei jedem Laden einer WordPress-Seite werden geplante Ereignisse geprüft, und wegen der regelmäßigen Plugin-Aufgaben muss das ineffiziente WP-Cron effizienter genutzt werden.
1️⃣ WP-Cron testen
Prüft man die Cron-Aufgaben mit WP-CLI, sieht man die aktiven Cron-Ereignisse laufen. Plugins wie Rank Math und WP Rocket führen ihre geplanten Aufgaben täglich oder im Minutentakt aus.

2️⃣ WP-Cron einrichten
WP-Cron ist ein virtueller Scheduler für die geplanten Aufgaben von WordPress; wp-cron.php läuft, wenn Nutzer die Website besuchen. Die trafficabhängige Ausführung ist aber unzuverlässig und kann durch zu viele Aufrufe den Server belasten, daher ergänzt man sie meist mit einem System-Cron.
Bei Bedarf empfiehlt es sich, in wp-config.php DISABLE_WP_CRON zu setzen, WP-Cron abzuschalten und es regelmäßig per Linux-Cron auszuführen.
|
Kategorie |
WP-Cron deaktivieren + nur System-Cron ausführen |
|---|---|
|
Einstellung |
WP-Cron abschalten und wp-cron.php über den System-Cron ausführen |
|
Vorteile |
Keine doppelten Läufe, exakt zeitgesteuerte Ausführung und wenig Serverlast |
|
Nachteile |
Manche Plugin-Funktionen können ausfallen, und Einrichtungsfehler können Aufgaben ausfallen lassen |
|
Empfohlen · Situation |
Geeignet für Websites mit viel Traffic und vielen geplanten Aufgaben |
Methode ① hat allerdings einen Nachteil: Sie schaltet die Preload-Funktion von Cache-Plugins wie WP Rocket ab, die jede Minute den Cache vorab erzeugt, bevor Besucher kommen.
⚙️ Die Datei wp-config.php bearbeiten
Du kannst es einrichten, indem du WP_CRON deaktivierst.
# WP_CRON deaktivieren
define( 'DISABLE_WP_CRON', true );Während WP-Cron läuft, ist WP_CRON_LOCK_TIMEOUT eine „zeitbasierte Sperre“, die weitere Startversuche blockiert.
# 5 Minuten = 300, alle 60 Minuten = 3600
define('WP_CRON_LOCK_TIMEOUT', 300);Aus diesen Gründen empfehle ich, WP-Cron in der Datei wp-config.php nicht nur zu deaktivieren, sondern danach auch einen System Cron Job hinzuzufügen – so ist auch der Server eingerichtet, den ich derzeit betreue.
⚙️ System-Cron auf einem Linux-Server aktivieren [Grundlagen]
Du kannst es pro Domain aktivieren.
# Alle 5 Minuten ausführen
*/5 * * * * curl -s https://example.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1
# Alle 30 Minuten ausführen
*/30 * * * * curl -s https://example.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1
# Jede Stunde ausführen
0 * * * * curl -s https://example.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1
# Einmal am Tag ausführen
0 3 * * * curl -s https://example.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1Die vier Zeilen oben sind Beispiele je Intervall für die crontab: Zu jeder festgelegten Zeit ruft curl die Adresse [wp-cron.php] auf, sodass geplante Aufgaben auch ohne Besucher laufen.
# Wenn der Server ein lokaler Server ist
*/5 * * * * php /path/to/wordpress/wp-cron.php > /dev/null 2>&1
# Alle 30 Minuten ausführen
*/30 * * * * php /path/to/wordpress/wp-cron.php > /dev/null 2>&1
# Jede Stunde ausführen
0 * * * * php /path/to/wordpress/wp-cron.php > /dev/null 2>&1
# Einmal am Tag ausführen
0 3 * * * php /path/to/wordpress/wp-cron.php > /dev/null 2>&1Ist WP-CLI installiert, richtest du nur eine Zeile mit dem gewünschten Intervall ein. ▼
# Alle 5 Minuten ausführen
*/5 * * * * cd /sites/example.com/files/ && flock -n ~/.wp_cron.lock /usr/local/bin/wp cron event run --due-now --quiet
# Alle 30 Minuten ausführen
*/30 * * * * cd /sites/example.com/files/ && flock -n ~/.wp_cron.lock /usr/local/bin/wp cron event run --due-now --quiet
# Jede Stunde ausführen
0 * * * * cd /sites/example.com/files/ && flock -n ~/.wp_cron.lock /usr/local/bin/wp cron event run --due-now --quiet
# Einmal am Tag ausführen
0 3 * * * cd /sites/example.com/files/ && flock -n ~/.wp_cron.lock /usr/local/bin/wp cron event run --due-now --quietHier führt WP-CLI auf dem Server mit der Option [--due-now] nur fällige geplante Aufgaben aus, und [flock -n] überspringt einen neuen Lauf, solange der vorherige nicht beendet ist.
⚙️ WP-CLI und System-Cron im Minutentakt, doppelte Cron-Läufe verhindern
Standardmäßig ignoriert (überspringt) WP_CRON Aufgaben einfach, wenn viel zu tun ist, und führt sie später erneut aus. Schalte das Standard-WP-Cron ab und lass geplante Aufgaben eine 5-Minuten-Sperre halten, damit System-Cron und WP-Cron nicht gleichzeitig laufen.
define('DISABLE_WP_CRON', true); // automatische Ausführung von WP-Cron aus
define('WP_CRON_LOCK_TIMEOUT', 300); // kein Warten → übersprungen; hält während einer geplanten Aufgabe 5 Minuten lang eine Sperre
/* That's all, stop editing! Happy publishing. */Ergänze im System-Cron die Option flock -n, damit ein Lauf auf System-Cron-Seite sofort beendet wird.
# wp-cron-Einstellung: flock -n → kein Warten → sofort beenden
*/1 * * * * cd /sites/example.com/files/ && flock -n ~/.wp_cron.lock /usr/local/bin/wp cron event run --due-now --quietDas Ergebnis dieser Kombination:
- Die interne Auto-Ausführung von WP ist aus → geplante Aufgaben laufen unabhängig von der Besucherzahl
- Der System-Cron versucht jede Minute einen Lauf → stehen geplante Aufgaben an, laufen sie
- Ist die Sperre aktiv, gibt es 5 Minuten lang keinen neuen Lauf → verhindert doppelte Läufe (mit flock -n ist WP_CRON_LOCK_TIMEOUT eigentlich gar nicht nötig.)
Mit der Doppellauf-Sperre sieht der tatsächliche Ablauf so aus:
- 08:00 → der System-Cron ruft wp-cron.php auf
- Geplante Aufgabe A läuft → 5-Minuten-Sperre gesetzt
- 08:01 → der System-Cron ruft erneut auf
- Aufgabe A ist gesperrt → läuft nicht
- 08:02–08:04 → ebenso
- 08:05 → Sperre aufgehoben → steht die nächste geplante Aufgabe an, läuft sie
Statt dass WordPress Aufgaben automatisch ausführt, übernimmt das System die Ausführung. Und WP_CRON_LOCK_TIMEOUT dient als zusätzliche Absicherung gegen doppelte Läufe.
|
Kategorie |
WP_CRON_LOCK_TIMEOUT |
flock -n |
|---|---|---|
|
Sperrart |
Innerhalb von WordPress |
Systemebene |
|
Ort der Sperre |
In der DB: doing_cron in wp_options |
Als Systemdatei: ~/.wp_cron.lock |
|
Wartet? |
❌ Wartet nicht → überspringt |
❌ Wartet nicht → beendet sofort |
|
Schutz vor Doppelläufen |
✅ Verhindert Doppelläufe |
✅ Verhindert Doppelläufe |
Danach kannst du per WP-CLI-Befehl prüfen, ob Cron wie gewohnt funktioniert.
wp cron event list+-------------------------------------------+---------------------+-----------------------+---------------+
| hook | next_run_gmt | next_run_relative | recurrence |
+-------------------------------------------+---------------------+-----------------------+---------------+
| rocket_saas_pending_jobs | 2026-10-17 12:00:57 | now | 1 minute |
| action_scheduler_run_queue | 2026-10-17 12:00:57 | now | 1 minute |
| action_scheduler_run_queue_rucss | 2026-10-17 12:00:58 | now | 1 minute |
| rocket_saas_on_submit_jobs | 2026-10-17 12:00:58 | now | 1 minute |
| rocket_preload_process_pending | 2026-10-17 12:00:59 | now | 1 minute |
| rocket_purge_time_event | 2026-10-17 12:16:59 | 15 minutes 8 seconds | 1 hour |
| wp_privacy_delete_old_export_files | 2026-10-17 12:28:46 | 26 minutes 55 seconds | 1 hour |
| wp_update_user_counts | 2026-10-17 20:15:52 | 8 hours 14 minutes | 12 hours |
| rocket_preload_revert_old_failed_rows | 2026-10-17 20:17:59 | 8 hours 16 minutes | 12 hours |
| wp_version_check | 2026-10-17 20:28:34 | 8 hours 26 minutes | 12 hours |
| wp_update_plugins | 2026-10-17 20:58:34 | 8 hours 56 minutes | 12 hours |
| wp_update_themes | 2026-10-17 21:28:34 | 9 hours 26 minutes | 12 hours |
| recovery_mode_clean_expired_keys | 2026-10-18 07:28:46 | 19 hours 26 minutes | 1 day |
| wp_privacy_personal_data_cleanup_requests | 2026-10-18 07:28:46 | 19 hours 26 minutes | 1 day |
| wp_scheduled_delete | 2026-10-18 08:15:52 | 20 hours 14 minutes | 1 day |
| delete_expired_transients | 2026-10-18 08:15:52 | 20 hours 14 minutes | 1 day |
| wp_scheduled_auto_draft_delete | 2026-10-18 08:15:54 | 20 hours 14 minutes | 1 day |
| wp_delete_temp_updater_backups | 2026-10-18 08:16:17 | 20 hours 14 minutes | 1 week |
| rocket_update_dynamic_lists | 2026-10-18 08:16:57 | 20 hours 15 minutes | 1 week |
| rocket_saas_clean_rows_time_event | 2026-10-18 08:16:57 | 20 hours 15 minutes | 1 week |
| rocket_performance_hints_cleanup | 2026-10-18 08:16:58 | 20 hours 15 minutes | 1 day |
| rocket_preload_clean_rows_time_event | 2026-10-18 08:26:57 | 20 hours 25 minutes | 1 week |
| rocket_database_optimization_time_event | 2026-10-18 09:34:25 | 21 hours 32 minutes | 1 day |
| wp_site_health_scheduled_check | 2026-10-19 07:28:46 | 1 day 19 hours | 1 week |
| rocket_remove_saas_failed_jobs | 2026-10-19 08:16:58 | 1 day 20 hours | 3 days |
+-------------------------------------------+---------------------+-----------------------+---------------+Die Ausgabe zeigt die registrierten Hook-Namen, den nächsten Ausführungszeitpunkt und das Intervall; Aufgaben, bei denen in der Spalte [next_run_relative] [now] steht, werden beim nächsten Cron-Lauf sofort abgearbeitet.
ℹ️ Affiliate-Hinweis
Die Inhalte dieser Website enthalten Affiliate-Links. Kauft ein Besucher über einen dieser Links ein Produkt oder eine Dienstleistung, erhält die Website vom Verkäufer eine Provision. Der Betrag, den der Käufer zahlt(bei Aktionsrabatten sinkt er ↓), steigt dadurch nicht. Angegebene Preise, Rabatte und Lagerbestände entsprechen dem Stand bei Erstellung und können abweichen; prüfe sie daher vor dem Kauf beim Verkäufer. Produkte werden nach eigenen Kriterien ausgewählt und bewertet, und Provisionen beeinflussen weder die Reihenfolge noch den Inhalt der Bewertungen.