Wie WordPress-Cron funktioniert

Veröffentlicht: 2021-12-03

Haben Sie sich jemals gefragt, was WP-Cron ist? Wenn ja, dann ist dies der perfekte Artikel für Sie, um alles zu erfahren, was Sie über geplante WordPress-Aufgaben wissen müssen.

Cron (Command Run On) ist ein Dienstprogramm, das in UNIX-Systemen gestartet und später auf den LINUX-Distributionen weiterentwickelt wurde, das als zeitbasierter Job-Scheduler vorgeschlagen wurde.

Ein Cronjob ist eine Aufgabe, die wiederholt oder als einmalige Aufgabe ausgeführt wird. Im Laufe der Jahre wurde es hauptsächlich als Systemverwaltungstool zum automatischen Ausführen von Aufgaben verwendet.

WordPress-Cron

Beim Betrieb einer WordPress-Website werden einige Aufgaben im Hintergrund ausgeführt, die regelmäßig ausgeführt werden müssen, z. B. das Suchen nach Aktualisierungen von Themen und Plugins, geplanten Posts, zu löschenden Transienten und vielem mehr. Diese zeitbasierten geplanten Aufgaben werden vom WP-Cron erledigt.

In Ihrer WordPress-Installation ist die Datei, die sich auf Cron-Jobs bezieht, die Datei wp-cron.php , die sich im Stammordner Ihrer Installation befindet.

Die Datei wp-cron.php enthält den Code für die automatisierten Aufgaben im Zusammenhang mit Updates und Posts.

Wie es funktioniert

Der WP-Cron überprüft die Aufgabenliste bei jedem Seitenaufruf und führt entsprechend aus.

Wenn in dem Moment, in dem die Seite geladen wird, eine Aufgabe fällig ist, wird sie in eine Warteschlange eingefügt. Auf diese Weise stellt WordPress sicher, dass auch die fälligen Ereignisse ausgelöst und nicht übersprungen werden und schließlich alle Aufgaben beim Laden dieser Seite ausgeführt werden.

Es ist natürlich, wenn Ihnen das irrational erscheint, aber denken Sie über die Alternative nach. In einer Shared-Hosting-Umgebung, wie sie mehrheitlich der Fall ist, sollten Sie Zugriff auf die Serverbefehle haben, um diese Aufgaben nach Belieben zu steuern, aber wäre das nicht riskant für den Server?

Überlegen Sie also, was WordPress in dieser Situation als Problemumgehung tut. Dies hat jedoch einige Nachteile, die wir gleich untersuchen werden.

Das WP-Crontrol-Plugin

Eine großartige und einfache Möglichkeit, die Liste der Cron-Jobs auf Ihrer WordPress-Website anzuzeigen, ist die Installation des WP-Crontrol-Plugins.

Nach der Aktivierung können Sie die Admin-Seite des Plugins unter dem Menüpunkt Tools->Cron Events anzeigen. In einer Vanilla-Installation sehen Sie so etwas:

Wenn Sie mit der Maus über jede Zeile fahren, werden Sie feststellen, dass Ihnen Aktionen zum Bearbeiten oder Ausführen von Ereignissen zur Verfügung stehen.

Im Bearbeitungsbildschirm des wp_update_themes-Ereignisses können Sie beispielsweise seine Einstellungen ändern

Unter dem Menüpunkt Einstellungen -> Cron-Zeitpläne können Sie die Standardzeitpläne anzeigen und, wenn Sie möchten, einen eigenen hinzufügen und ihm einen Namen geben, der in der Liste angezeigt werden soll.

So erstellen Sie einen Cronjob

Um einen Cron-Job manuell hinzuzufügen, müssen Sie lediglich die Datei functions.php des Themes bearbeiten. Um ein einfaches Beispiel zu demonstrieren, öffnen Sie es mit Ihrem bevorzugten Editor und fügen Sie den folgenden Code hinzu:

 add_action( 'my_cronjob', 'my_cronjob_function' ); function my_cronjob_function() { wp_mail( 'EMAIL_ADDRESS', 'Test email', 'This is a test message' ); }

Wobei „my_cronjob“ der Name Ihres Hooks und „my_cronjob_function“ der Name Ihrer Funktion ist, die einfach eine E-Mail an die von Ihnen definierte Adresse sendet, indem Sie EMAIL_ADDRESS durch die gewünschte ersetzen.

Als nächstes müssen wir diesen Hook so planen, dass er zu der von uns gewünschten Zeit ausgeführt wird.

So führen Sie den Job einmal aus

Um die Aktion als einmaligen WP-Cron-Job auszuführen, müssen wir die eingebaute WordPress-Funktion wp_schedule_single_event() verwenden, die so konzipiert ist, dass sie zu einem bestimmten Zeitpunkt einen Hook auslöst. Seine Struktur ist wie folgt:

wp_schedule_single_event( $timestamp, $hook, $args, $wp_error )

Wobei $timestamp der Unix-Zeitstempel für das nächste Ausführen des Ereignisses ist und $hook der Action-Hook ist, der ausgeführt werden soll, wenn das Ereignis ausgeführt wird.

Beide Parameter sind erforderlich. Lassen Sie uns nun über die optionalen Parameter sprechen.

Mit dem Parameter $args können Sie ein Array mit Argumenten verwenden, um es an die Callback-Funktion des Hooks zu übergeben. Jeder Wert im Array wird als einzelner Parameter an den Callback übergeben. Die Array-Schlüssel werden ignoriert.

Der Parameter $wp_error kann verwendet werden, um bei einem Fehler einen WP_Error zurückzugeben. Sein Standardwert ist false.

Der entsprechende Code in unserer Datei functions.php würde so aussehen:

 add_action( 'my_cronjob', 'my_cronjob_function' ); function my_cronjob_function() { wp_mail( 'EMAIL_ADDRESS', 'Test email', 'This is a test message' ); } wp_schedule_single_event( time() + 3600, 'my_cronjob' );

An diesem Punkt sollten Sie Ihre benutzerdefinierte Aufgabe in der Liste sehen können.

So führen Sie den Job als wiederkehrendes Ereignis aus

Was WordPress für dieses Szenario bereitstellt, ist die Funktion wp_schedule_event(), die so aufgebaut ist

wp_schedule_event( $timestamp, $recurrence, $hook, $args, $wp_error)

Der $timestamp-Parameter ist der erforderliche Unix-Zeitstempel für das nächste Ausführen des Ereignisses, $recurrence ist eine Zeichenfolge, die auch dafür erforderlich ist, wie oft das Ereignis anschließend wiederholt werden soll, und $hook ist der Aktions-Hook, der ausgeführt wird, wenn das Ereignis ausgeführt wird.

Die optionalen Parameter $args und $wp_error sind dieselben wie zuvor.

Der Code, der den Job mit einer Wiederholung von, sagen wir, 1 Stunde ausführt, lautet wie folgt:

 add_action('my_hourly_cronjob', 'hourly_action'); function hourly_action() { wp_mail( 'EMAIL_ADDRESS', 'Test email', 'This is a test message' ); } if (! wp_next_scheduled ( 'my_hourly_cronjob' )) { wp_schedule_event(time(), 'hourly', 'my_hourly_cronjob'); }

Wir haben die Funktion wp_next_scheduled() in einer 'if'-Anweisung verwendet, wie Sie oben sehen, um doppelte Ereignisse zu vermeiden und sicherzustellen, dass die Aufgabe nicht bereits geplant ist, bevor Sie fortfahren und sie ausführen.

Wir haben auch das 'stündliche' Label aus der geplanten Tabelle unter Einstellungen -> Cron-Zeitpläne verwendet. Wenn wir ein anderes Auftreten wünschen, sagen wir alle 45 Minuten, sollten wir zuerst einen benutzerdefinierten Cron-Zeitplan mit dem Namen „45_minutes“ erstellen und ihn dann im Code verwenden.

 add_action('my_45_cronjob', 'my_45_action'); function my_45_action() { wp_mail( 'EMAIL_ADDRESS', 'Test email', 'This is a test message' ); } if (! wp_next_scheduled ( 'my_45_cronjob' )) { wp_schedule_event(time(), '45_minutes', 'my_45_cronjob'); }

An diesem Punkt sollten Sie Ihre benutzerdefinierte Aufgabe in der Liste mit den erwarteten Änderungen sehen können:

Nachteile von WP-Cron

Die Art und Weise, wie WordPress mit Cron-Jobs umgeht, stellt sicher, dass die Aufgabe ausgeführt wird, aber Sie können nicht angeben, wann, da, wie gesagt, die Überprüfung durchgeführt wird, wenn ein Besucher eine Seite Ihrer Website lädt.

Wenn wir die Cron-Jobs-Steuerung auf die Besuchszeit der Benutzer übertragen, ist es möglich, dass wir negative Auswirkungen auf die Website haben, unabhängig von ihrer Größe oder ihrer Beliebtheit.

Hosten Sie Ihre Website mit Pressidium

60- TÄGIGE GELD-ZURÜCK-GARANTIE

SEHEN SIE UNSERE PLÄNE

Bei einer beliebten Website werden Sie aufgrund der gleichzeitigen Ausführung einer großen Anzahl von Aufgaben einen großen Datenverkehr erleben. Dies kann die Ressourcen Ihres Servers verbrauchen und die Leistung beeinträchtigen oder sogar Ausfallzeiten Ihrer Website verursachen.

Im Fall einer kleinen Website, die wenige Besucher bedeutet, wird der wp-cron nicht so oft ausgelöst, daher können einige wichtige Cron-Jobs für genügend Zeit verschoben werden, um Nebenwirkungen zu erzeugen, wie z. B. nicht genügend Backups zu erstellen oder die Aktualisierung einiger zu verzögern Daten, die bei einem Cronjob gezählt werden.

Deaktivieren Sie WP-Cron

Wenn die Art und Weise, wie WP-Cron mit Cron-Jobs umgeht, Ihren Anforderungen nicht entspricht und Sie die Aufgaben pünktlich ausführen möchten, sollten Sie WP-Cron deaktivieren und einen serverseitigen Cron-Dienst verwenden.

Wenn das Deaktivieren von WP-Cron keine bereits von Ihrem Hosting-Provider bereitgestellte Option ist, können Sie es hier selbst tun.

Öffnen Sie die Datei wp-config.php , die sich im Stammordner Ihrer Installation befindet, mit Ihrem bevorzugten Editor und suchen Sie die Zeilen, die sich auf das Präfix der Datenbanktabelle beziehen. Fügen Sie direkt danach diese Zeile ein:

 // /** * WordPress Database Table prefix. * * You can have multiple installations in one database if you give each * a unique prefix. Only numbers, letters, and underscores please! */ $table_prefix = 'wN0b9WQk_'; define('DISABLE_WP_CRON', 'true');

Dies ist obligatorisch, wenn Sie mit einem stabileren Scheduler wie dem Linux-Cron-Dienst arbeiten möchten, um wp-cron.php auszulösen, wann immer es Ihnen besser passt.

Eine serverseitige Lösung: Der Linux-Cron-Dienst

Bei Pressidium verwenden wir das Linux Crontab, um WP-Cron alle 5 Minuten auszulösen. Es ist die richtige Zeitspanne, die sicherstellt, dass Ihre geplanten Jobs pünktlich ausgeführt werden und gleichzeitig eine Überlastung Ihrer WordPress-Website vermieden wird. Dies greift nicht in den WP-Cron-Scheduler ein, sondern nur in den Auslösemechanismus.

Fazit

Hoffentlich hat Ihnen dieser Artikel geholfen, sich mit WordPress Cron vertraut zu machen, was es ist und wie es funktioniert und wie Sie Ihre eigenen Zeitpläne und Aufgaben erstellen. Überlegen Sie jedoch zweimal, ob WP-Cron für Ihre Anforderungen ausreicht, bevor Sie sich für andere serverseitige Lösungen entscheiden.