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

Affiliate-Hinweis v3.1
Affiliate-Hinweis v3.2 (mobil)

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

Wie WP-Cron läuft und aufgebaut ist

Ⅱ. WordPress-Performance optimieren

  • ↳ Optimieren über die WP-Cron-Einstellungen

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.

WordPress
Performance-Optimierung
Caching-Einstellungen
Browser-Caching
Objekt-Caching
Seiten-Caching
Caching-Plugins(WP Rocket, W3 Total Cache usw.)
Frontend-Optimierung
Bildkomprimierung und -formate(WebP usw.)
Lazy Load aktivieren
CSS/JS komprimieren und zusammenfassen
Passende Plugins(Autoptimize, ShortPixel usw.)
Datenbank bereinigen
Revisionen/Spam/temporäre Tabellen entfernen
DB-Optimierungs-Plugins(WP-Optimize usw.)
WP-Cron-Einstellungen
WP-Cron(wp-cron.php)
ⓐ Prüft bei jedem Besuch geplante Aufgaben
ⓑ Wiederkehrende Plugin-Aufgaben(Rank Math, WP Rocket usw.)
Performance-Probleme von WP-Cron
Abhängigkeit vom Traffic
Serverüberlastung durch zu viele Aufrufe
Doppelte Läufe und Engpässe
Wie WP-Cron läuft
Traffic-basierter virtueller Scheduler
Ablauf geplanter Aufgaben
Läuft bei Besuchen statt nach Uhrzeit

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.

WP CLI- geplante Cron-Ereignisse mit dem Befehl wp-cron event list prüfen_

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>&1

Die 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>&1

Ist 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 --quiet

Hier 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 --quiet

Das 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:

  1. 08:00 → der System-Cron ruft wp-cron.php auf
    • Geplante Aufgabe A läuft → 5-Minuten-Sperre gesetzt
  2. 08:01 → der System-Cron ruft erneut auf
    • Aufgabe A ist gesperrt → läuft nicht
  3. 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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Beweisen Sie, dass Sie ein Mensch sind: 3   +   1   =