WordPress-Cronjob – Was macht dieses Helferlein?
Cron ist ein Unix / Linux-Dienstprogramm, das normalerweise zum Planen von Befehlen oder eines Scripts auf einem Webserver verwendet wird, das im Hintergrund ausgeführt wird. Ein Cron-Job ist die Aufgabe selbst, mit der Aufgaben zu regelmäßigen festen Zeiten, Daten oder Intervallen geplant werden. In der Regel handelt es sich dabei um sich wiederholende Vorgänge, die zur Zeitersparnis automatisiert werden. In WordPress übernimmt dies WP-Cron, mit dem ein System-Cron simuliert wird.
Einige Beispiele für einen WordPress-Cron-Job sind das Planen eines Veröffentlichungsbeitrags oder die Datensicherung nach einem vordefinierten Zeitplan durch ein Plugin.
Wie funktioniert ein Cron Job in WordPress?
Es ist wichtig zu beachten, dass ein WP-Cron sich geringfügig von einem System-Cron unterscheidet und dass jeder seine eigenen Vor- und Nachteile hat. Beispielsweise verlässt sich WP-Cron vollständig auf Intervalle, wohingegen sich ein System-Cron auf bestimmte Zeiten verlässt.
Ein WP-Cron funktioniert auch nur, wenn die Seite geladen ist (Backend oder Frontend), was weniger zuverlässig sein könnte. (Stichwort „verpasste Planung“; falls du deine Beiträge im Voraus planst, wird dir diese Sache schon das ein oder andere Male Ärgernis bereitet haben).
Die von WordPress bereitgestellten Standardintervalle sind stündlich, zweimal täglich und täglich. Erweitert kann dieser Zeitrahmen von Plugins werden, wie zum Beispiel durch das Plugin „WP Crontrol“. Hier gibst du dann in Sekunden an, welche zusätzlichen Intervalle du dir wünscht.
Um Cron-Ereignisse in WordPress zu planen, musst du benutzerdefinierte Hooks erstellen. Im offiziellen WordPress-Plugin-Handbuch gibt es hierzu eine erstaunlich genaue Anleitung zur Planung von WP Cron-Events.
Cronjob funktioniert nicht richtig – woran liegt das?
WP-Cron wird wie erwähnt nur ausgeführt, wenn etwas deine Website besucht; entweder im Frontend oder im Backend. Dabei wähle ich nun bewusst den Begriff „etwas“, weil es egal ist, ob es sich um einen Benutzer, einen Besucher, einen Bot, einen Ping oder sonstiges handelt. Deine Website muss lediglich so besucht werden, dass der WP-Cron gestartet wird.
Das ist bei stark frequentierten Websites natürlich kein Problem, aber für kleine Seiten oder solche, die nicht so oft besucht werden, kann dies bedeuten, dass Probleme von Zeit zu Zeit auftreten. Zu den häufigsten Vorkommnissen zählen:
- Benachrichtigungen über die Veröffentlichung eines neuen Beitrags werden nicht rechtzeitig gesendet, wenn ein geplanter Beitrag vom geplanten zum Veröffentlichungsstatus wechselt.
- Nach Ablauf des festgelegten Zeitraums werden keine Benachrichtigungen zur Erinnerung an das Update gesendet.
- Benachrichtigungen zur Erinnerung an die Benutzeranmeldung werden nach dem festgelegten Zeitraum nicht gesendet.
Aber auch bei Seiten, die einen hohen Besucherandrang haben, kann WP-Crons zum Problem werden. Wenn nämlich die Anzahl der Besuche zunimmt, wird die mehrmalige Überprüfung auf geplante Aufgaben schließlich sehr ineffizient sein und zu Problemen bei der Ressourcennutzung auf dem Server führen. Das führt wiederum zu einer Verlangsamung des Ladevorgangs deiner Seite und das wirkt sich nicht zuletzt schlecht auf dein Suchmaschinenranking aus.
Wie kannst du dir bei solchen Problemen helfen?
Es gibt verschiedene Lösungsmöglichkeiten, um das zu beheben. Zu den gängigsten zählen:
- Verwende einen Uptime-Monitor, um deine Website alle paar Minuten/Stunden/Tage per Ping zu erreichen.
- Verwenden den Cron-Dienst eines Drittanbieters.
- Deaktiviere WP-Cron und lege in deinem Hosting-Control-Panel (sofern verfügbar) einen geeigneten Cron für die Ausführung fest. Oder du nutzt ein Crontrol-Plugin.
Wie deaktiviert man WP-Cron?
WordPress verwendet eine Datei mit dem Namen wp-cron.php als virtuellen Cron-Job. Hier wird das zuvor beschriebene Standardverhalten aktiviert (bei jedem Besuch wird abgefragt, ob es etwas zu tun gibt). Wir können WordPress leicht anweisen, die Ausführung von wp-cron.php mit der Datei wp-config.php zu erledigen. Das machst du folgendermaßen:
- Öffne die Datei wp-config.php
- Scrolle zum Ende der Datenbankeinstellungen und füge folgenden Code hinzu: define (‚DISABLE_WP_CRON‘, ‚true‘);
- Speichere deine Änderungen
Jetzt führt WordPress das Skript wp-cron.php nicht automatisch jedes Mal aus, wenn die Website einen neuen Besucher erhält.