Manchmal möchte man, dass zum Beispiel eine Veröffentlichung eines Beitrags erst zu einem bestimmten Zeitpunkt erfolgt („nächsten Mittwoch, 0:00 Uhr“) oder ein Backup regelmäßig („an jedem Montag um 3:50 Uhr“) ausgeführt wird. Auf Unix-basierten Servern (die meisten Webserver laufen auf Linux) hast du dazu die Möglichkeit, einen so genannten Cron-Job einzurichten. Ein Programm gleicht laufend die aktuelle Zeit mit einer Liste chronologisch sortierter Aufgaben ab und führt sie bei Fälligkeit aus.
Wenn sich viele Kunden im Shared Hosting einen Webserver teilen, kann die Einrichtung von Cron-Jobs die Performance des Servers beeinträchtigen. Stell dir dazu einfach vor, dass jeder zweite Kunden alle drei Minuten ein Skript ausführen lässt, was CPU und RAM des Servers auslastet. Deshalb erlauben viele Webhostern ihren Kunden nicht, eigene Cron-Jobs einzurichten.
Damit WordPress auf möglichst vielen Servern problemlos läuft und trotzdem Aufgaben zu festgelegten Zeiten ausgeführt werden können, haben sich die Entwickler in ihrer Weisheit für eine Lösung entschieden, die Pseudo-Cron genannt wird: Sobald jemand einen Seite oder einen Beitrag deiner Website aufruft, wird rasch geprüft, ob dabei ein Zeitpunkt überschritten wurde, zu dem eine Aufgabe anstand. Die Warteschlange für anstehende Aufgaben ist die in der Fehlermeldung genannte action_scheduler_run_queue
.
Nehmen wir nun an, deine Website behandelt ein Thema, das einige wenige Leute brennend interessiert, aber nicht mehrmals täglich aufgerufen wird. Die Fehlermeldung „Das geplante Ereignis, action_scheduler_run_queue, wird zu spät ausgeführt.“ besagt dann, dass seit dem letzten Besuch schon einige Aufgaben abgearbeitet werden sollten. Da aber erst einige Tage später wieder jemand die Website besucht, funktioniert der Pseudo-Cron nicht zuverlässig. Darauf wirst du nun hingewiesen.
Was macht man jetzt damit? Entweder entscheidest du, dass dieser „Fehler“ schlicht nicht tragisch ist und behältst alles so bei, wie es ist. Oder du richtest irgendwo einen Cron-Job ein (z.B. bei https://cron-job.org/de/), der in regelmäßigen Abständen (z.B. viertelstündig) eine PHP-Datei von WordPress abruft:
wget -q -O - https://domain.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1#
domain.com
musst du hierbei natürlich mit der Domain deiner eigenen Website ersetzen.
Damit es keine Überschneidungen mit dem Pseudo-Cron von WordPress gibt, solltest du den internen Dienst außerdem durch einen Eintrag in der wp-config.php
deaktivieren. Dazu trägst du oberhalb von /* That's all, stop editing! Happy publishing. */
folgende Zeile ein:
define ('DISABLE_WP_CRON', true);
Übrigens kann auch die Verwendung von Cache-Plugins dazu führen, dass der Pseudo-Cron nicht ausgeführt wird, weil statt einer neuen Datenbankabfrage die zwischengespeicherten HTML-Dokumente an die Webseitenbesucher ausgeliefert werden. Je nach eingestellter Dauer, wann der Cache verfällt, kann selbst eine stark frequentierte Website dann über einen längeren Zeitraum die Warteschlange mit terminierten Aufgaben nicht abarbeiten. Auch hier hilft dann die Einrichtung eines richtigen Cron-Jobs, was sich übrigens auch positiv auf die Performance der Website auswirkt.