WPLake > Blog > 5 wichtige Dinge über WordPress Cron
  • English
  • Español
  • Français
  • Italiano

5 wichtige Dinge über WordPress Cron

Zeit zum Lesen: 9 Minuten

-

Allgemein Anleitungen

-

Aktualisiert 14.07.23

WordPress Cron bietet eine einfache Möglichkeit, Aktionen zu planen, ohne sich um die Implementierung zu kümmern. Wir überprüfen bestimmte Momente, um Ihnen zu helfen, Cron richtig zu verwalten.

Inhaltsübersicht

Was ist Cron?

#Link kopiert

Der Cron ist, kurz gesagt, eine Möglichkeit, einige Aufgaben (oder Jobs, wenn Sie so wollen) nach einem Zeitplan auszuführen. Um zum Beispiel die Währungskurse auf Ihrer Website auf dem neuesten Stand zu halten, müssen Sie sie einmal am Tag aktualisieren. Anstatt dies manuell zu tun, erstellen Sie eine Cron-Aufgabe und richten sie mit der Häufigkeit von einmal pro Tag ein. Cron wird in vielen WordPress-Plugins und Themes verwendet, um Informationen auf dem neuesten Stand zu halten.

System Cron VS WordPress Cron

#Link kopiert

Bei WordPress gibt es 2 verschiedene Möglichkeiten, dies zu tun.

System-Cron

#Link kopiert

Die erste Möglichkeit ist das Hinzufügen in den Linux system cron (dieser befindet sich auf Ihrem Hosting-Server). Diese Aufgaben befinden sich in der Datei /etc/crontab, wobei dieser Ansatz die universellste und zuverlässigste Art ist, Cron-Aufgaben auszuführen. Ihr Server-Betriebssystem (z.B. Linux, Ubuntu oder RedHat) garantiert, dass die Aufgaben in unseren PHP-Dateien so aufgerufen werden, wie sie geplant wurden, unabhängig von externen Ereignissen.

Auch wenn es universeller und zuverlässiger ist, hat es keine Integration mit WordPress. Das heißt, wenn Sie PHP-Dateien innerhalb Ihres Themes direkt aufrufen, dann haben diese keinen Zugriff auf WordPress-Funktionen und die Datenbank. Denn WordPress kann auf diese Weise nicht richtig geladen werden. Außerdem ist es nicht für Plugins geeignet, denn wenn du das Plugin verwendest, kannst du nicht einfach das System Cron für alle deine Kunden einrichten.

WordPress Cron

#Link kopiert

Dann kommt WordPress Cron dazu und ist die zweite Möglichkeit, Cron-Aufgaben auszuführen. Sie können Ihre Cron-Tasks einfach in WordPress registrieren, und WordPress kümmert sich um das Laden und Ausführen Ihrer Tasks innerhalb des von Ihnen festgelegten Zeitplans. Klingt gut und ist auch für Plugins geeignet.

Was kann besser sein, oder? Aber nichts ist perfekt und dieser Ansatz hat auch Nachteile.

WordPress ist eine PHP-basierte Anwendung und hat keinen Zugriff auf Ihr System Cron (Betriebssystem, das auf Ihrem Host läuft). Das bedeutet, dass WP ein externes Ereignis benötigt, um die Zeitplanliste zu überprüfen und die entsprechenden Aufgaben auszuführen. Ein weiterer Punkt ist, dass WordPress NUR Cron-Aufgaben ausführen kann, wenn jemand eine Seite auf der Website besucht oder öffnet. Wenn niemand Ihre Website besucht, werden die Cron-Aufgaben NICHT ausgeführt.

Das mag beängstigend klingen, aber die gute Nachricht ist, dass WordPress garantiert, dass die Aufgaben aufgerufen werden, es gibt nur keine Garantie, wann genau sie aufgerufen werden. Sie haben zum Beispiel eine Cron-Währungskurs-Aufgabe so eingerichtet, dass sie einmal am Tag ausgeführt wird. Im wirklichen Leben bedeutet dies, dass die Aufgabe mit dem ersten Besucher nach einem Tag zur festgelegten Zeit ausgeführt wird. Nicht früher, aber vielleicht später, vielleicht sogar viel später, wenn Sie mehrere Tage lang keine Besucher hatten.

Es gibt einige Aufgaben, die mit diesem Ansatz problemlos ausgeführt werden können, aber solange niemand Ihre Website besucht, läuft Cron nicht und "arbeitet" daher nicht wirklich. Aber es gibt andere Aufgaben, die Zuverlässigkeit erfordern. Wenn es bei Ihren Cron-Aufgaben darum geht, Informationen aus externen Quellen abzurufen, oder wenn es sich um sehr wichtige Aufgaben handelt, die unbedingt ausgeführt werden müssen, wie z. B. API-Aufgaben, können Sie sich nicht auf diesen Ansatz verlassen.

Verdikt

#Link kopiert

Beide Wege haben ihre Vor- und Nachteile.

Aus diesem Grund ist die beste Lösung, die von Fachleuten verwendet wird und empfohlen von WordPress, eine Kombination der beiden Ansätze, die Ihnen das Beste von beiden bietet und die Nachteile des jeweils anderen ausgleicht.

Als Website-Besitzer (oder Entwickler) müssen Sie den Cron-Job des Systems einrichten, der WordPress Cron aufruft. Im Großen und Ganzen ist dies relativ einfach zu bewerkstelligen, und auf diese Weise wird WordPress Cron zuverlässiger sein, während der native WordPress-Ansatz beibehalten wird.

Siehe Punkt Nr. 2 unten, um zu erfahren, wie man vorgeht.

Über WordPress Cron

#Link kopiert

Oben haben wir gelernt, dass WordPress eine PHP-basierte Anwendung ist und sein interner Cron auf externe Ereignisse, d.h. Benutzeranfragen, angewiesen ist. Neben dieser Tatsache gibt es eine Reihe von wichtigen Aspekten, auf die wir im Folgenden näher eingehen werden.

1. WordPress Cron ist asynchron

#Link kopiert

Zunächst einmal sollten Sie wissen, dass WordPress Cron asynchron ist. Asynchron bedeutet, dass Cron-Jobs in einer separaten Anfrage vom Ereignis selbst ausgeführt werden.

Eine Benutzeranfrage wird also nicht durch WordPress Cron verzögert, ein Benutzer, der einen Cron-Job ausgelöst hat, wird nicht warten, bis der Job beendet ist, um das Ergebnis seiner Anfrage zu sehen. Sie können also beruhigt aufatmen, wenn Sie wissen, dass es keine Verzögerungen für Ihre Besucher gibt. WordPress erledigt das alles still und leise im Hintergrund.

Wenn Sie sich für die genaueren Details interessieren, dann läuft es technisch gesehen folgendermaßen ab:

WordPress prüft den Cron-Zeitplan bei jeder Benutzeranfrage an eine Website, und wenn ein Cron-Job ausgeführt werden muss, erstellt es eine neue Anfrage an die Cron-Datei der Website (/cron.php) unter Verwendung der cURL-Bibliothek. Der Benutzer erhält die Antwort auf seine Anfrage sofort, während Cron die anderen Cron-Aufgaben in einer separaten Anfrage ausführt, die unabhängig ist.

2. WP Cron ist nicht zuverlässig (out-of-the-box). Way to fix

#Link kopiert

Wie wir bereits wissen, ist WordPress Cron out-of-the-box auf externe Ereignisse angewiesen. Verglichen mit dem System-Cron hat es einen großen Nachteil. Aber wir können ihn leicht beheben, indem wir den System-Cron und WordPress-Cron zusammenführen.

Die Lösung besteht also darin, einen Cron-Job innerhalb des System-Crons zu erstellen und WordPress-Cron von dort aus aufzurufen. Auf diese Weise erhalten wir einen zuverlässigen Cron mit allen WordPress-Funktionen und Unterstützung für Plugin-Cron-Jobs. Das hört sich vielleicht ein wenig kompliziert an, ist es aber nicht wirklich.

Für die offizielle Anleitung sehen Sie hier.

Die Aufgabe kann in 2 Schritte aufgeteilt werden. Im ersten Schritt geht es um die Erstellung eines neuen System-Cron-Jobs. Grundsätzlich gibt es zwei verschiedene Arten von Hosting (Shared und Dedicated), und wie man Cron-Jobs erstellt, hängt von Ihrem Hosting-Typ ab.

Wie man einen System-Cron-Job für Shared Hosting einrichtet

#Link kopiert

Bei der Nutzung von Shared Hosting gibt es viele verschiedene Anbieter, und Sie müssen die von Ihrem Anbieter angebotenen Funktionen für Cron-Aufgaben überprüfen. Normalerweise hat ein Hosting-Administrationspanel eine spezielle Registerkarte oder ein Element über Cron, wo Sie Cron-Aufträge verwalten können. Das gebräuchlichste Admin-Panel ist cPanel. Sie können mehr darüber lesen, wie man einen Cron-Job für cPanel hinzufügt, im offiziellen Artikel. Unten ist das offizielle Video zu sehen.

Wie man einen System-Cron-Job für das VPS-Hosting einrichtet

#Link kopiert

Wenn Sie Besitzer eines VPS (Virtual Private Server bzw. Dedicated) sind, müssen Sie sich mit SSH in Ihren Server einloggen und den folgenden Befehl ausführen, um eine Datei im Bearbeitungsmodus zu öffnen.

crontab -e

Schritt 1. Einrichten eines System-Cron-Jobs für WordPress Cron

#Link kopiert

Nun ist es an der Zeit, einen System-Cron-Job zu erstellen, der WordPress Cron aufruft.

a) Klassischer Ansatz (mit wget)

#Link kopiert

Fügen Sie eine neue Zeile in Ihre Cron-Datei ein und kopieren Sie den folgenden Inhalt.

*/10 * * * * wget -q -O - https://YOUR_DOMAIN_HERE/wp-cron.php?doing_wp_cron >/dev/null 2>&1

Hinweis: Die obige Zeile ist nicht geeignet für die Verwendung des WordPress Multisite Modus. Wenn Sie den WP Multisite-Modus verwenden und einen zuverlässigen Cron benötigen, dann lesen Sie mehr über Workarounds hier.

Vergessen Sie nicht, YOUR_DOMAIN_HERE durch Ihre Domain zu ersetzen.

Der erste Teil des Befehls gibt an, dass unser Befehl einmal alle zehn Minuten ausgeführt werden soll, unabhängig von der Stundenzahl, dem Wochentag und anderen Optionen. Der mittlere Teil verwendet das wget-Tool, um die WordPress-Cron-Datei anzufordern, und der letzte Teil besagt, dass wir die Ausgabe der Cron-Datei nicht speichern wollen.

Sie können mehr über die Argumente hier lesen.

b) Pro-Ansatz (mit WP-CLI)

#Link kopiert

Wenn Sie eine passwortgeschützte Website haben (z. B. Dev), wird die obige Methode nicht funktionieren, da wget die Datei wp-cron.php nicht aufrufen kann. Die Lösung in diesem Fall ist die Verwendung des WP-CLI-Tools auf Ihrem Server. Installieren Sie es einfach wie im offiziellen Handbuch beschrieben und fügen Sie die folgende Zeile in Ihren Cron-Zeitplan ein, die Cron über das CLI-Tool für die jeweilige Website aufruft:

// don't forget to replace the path below to yours
wp cron event run --due-now --path=/home/admin/domains/YOUR_DOMAIN_HERE/public_html >/dev/null 2>&1

Diese Methode ruft den Cron direkt über das Dateisystem auf, ohne HTTP-Anfragen. Das bedeutet, dass wir keine Probleme mit Websites haben, auch nicht mit passwortgeschützten.

Schritt 2. Standardmäßige WordPress-Prüfungen deaktivieren

#Link kopiert

Da wir nun WordPress Cron mit dem System Cron integriert haben, muss WordPress nicht mehr bei jeder Benutzeranfrage die Zeitplanliste überprüfen. Wir teilen WordPress dies mit, indem wir eine spezielle Konstante in der wp-config.php-Datei einrichten.

/* Add any custom values between this line and the "stop editing" line. */

define( 'DISABLE_WP_CRON', true );

/* That's all, stop editing! Happy publishing. */

Wie Sie sehen können, hat die Datei einen speziellen Abschnitt für benutzerdefinierte Werte, so dass Sie diese Konstante nach dem ersten Kommentar und vor dem zweiten hinzufügen müssen.

Kümmern Sie sich nicht um die Bezeichnung der Konstante, "DISABLE_WP_CRON" bedeutet nicht wirklich, dass WordPress Cron komplett deaktiviert wird. Es deaktiviert die Überprüfung der Zeitplanliste bei jeder Benutzeranfrage. WP Cron sollte weiterhin funktionieren, da wir die Datei wp-cron.php direkt über das System Cron aufrufen.

Das war's! Herzlichen Glückwunsch! Jetzt verfügt Ihre WordPress-Installation über einen zuverlässigen Cron mit allen WordPress-Funktionen. Cron führt die Aufgaben gemäß dem Zeitplan aus, unabhängig von der Anzahl der Besucher auf der Website.

3. wie man Cron-Jobs hinzufügt und entfernt

#Link kopiert

WordPress Cron-Job ist nur ein Stück PHP-Code, das nach einem Zeitplan ausgeführt wird. Außerdem kann er alle Funktionen von WordPress nutzen und hat Zugriff auf die Datenbank. Hier finden Sie einen Artikel für Entwickler von WordPress zu diesem Thema.

Auswahl eines Intervalls

#Link kopiert

Zunächst müssen wir ein Intervall wählen, in dem Cron unseren Job wiederholt. Die Standardintervalle von WordPress sind stündlich, zweimal täglich, täglich und wöchentlich. Obwohl dies für die meisten Fälle ausreicht, kann es sein, dass Sie ein eigenes Intervall benötigen. Wir können es durch Hinzufügen des folgenden Codes definieren.

add_filter('cron_schedules', function ($schedules) {
    return array_merge($schedules, [
        // here is the name of our custom interval. used when adding a new job
        'five_hours' => [
            // the number here represents seconds, so the formula is: 5 hours * 60 minutes * 60 seconds
            'interval' => 5 * 60 * 60,
            'display' => esc_html__('Every Five Hours'),
        ],
    ]);
});

Einen neuen wiederkehrenden Job hinzufügen

#Link kopiert

Um einen neuen Cron-Job hinzuzufügen, müssen wir einen neuen Shortcode hinzufügen und einen Zeitplan an den Shortcode anhängen. Das Intervall (das zweite Argument der wp_schedule_event() Funktion) muss eines der Standardintervalle sein, oder ein benutzerdefinierter Name, den man mit dem obigen Codeschnipsel hinzufügen kann.

add_action('YOUR_NAME_HERE', function () {
    /* your job here
    you can use all the WordPress features and functions
    e.g. wp_insert_post() */
});

// we must check that the event wasn't scheduled as each call creates a new one
// otherwise, if we've skipped the check it'll create a new event for each user request
if (!wp_next_scheduled('YOUR_NAME_HERE')) {
     /* the first argument is the timestamp which controls when the job 
       will be run for the first time
       the next argument  reflects the chosen interval */
    wp_schedule_event(time(), 'hourly', 'YOUR_NAME_HERE');
    return;
}

Im obigen Code haben wir einen leeren Job erstellt, der einmal pro Stunde von Cron ausgeführt wird.

Einen neuen einzelnen Job hinzufügen

#Link kopiert

Das obige Beispiel fügt einen Job hinzu, den Cron in einer wiederkehrenden Methode ausführt. Sie haben aber auch die Möglichkeit, einen einzelnen Job zu planen. Für dieses Ziel müssen Sie die Funktion wp_schedule_single_event() anstelle der Funktion wp_schedule_event() verwenden. Sie kann zwei (2) Arten von Argumenten akzeptieren: einen Zeitstempel mit der nächsten Ausführungszeit und den Hook, der den Job enthält. Lassen Sie uns also einen Job erstellen, den Cron nur einmal, nach 5 Stunden, ausführen wird:

add_action('YOUR_NAME_HERE', function () {
    /* your job here
     you can use all the WordPress features and functions
     e.g. wp_insert_post() */
});

// it's necessary to check that the event wasn't scheduled as each call creates a new one
// if you've skipped the check it'll create a new event for each user request
if (!wp_next_scheduled('YOUR_NAME_HERE')) {
    // as before, the first argument is the timestamp which controls when the job will be run
    // it's presented in seconds, so the formula is: 5 hours * 60 minutes * 60 seconds
    wp_schedule_single_event(time() + 5 * 60 * 60, 'YOUR_NAME_HERE');
    return;
}

Entfernen eines Cron-Jobs

#Link kopiert

Sie können einen geplanten Job entfernen, den Sie zuvor hinzugefügt haben. Das ist besonders bei wiederkehrenden Aufgaben nützlich. Zu diesem Zweck rufen wir die Funktion wp_unschedule_event() mit mehreren Argumenten auf. Das erste muss den nächsten Zeitstempel für das Ereignis enthalten (wir erhalten ihn dynamisch) und das zweite ist der Name der Aufgabe.

Der folgende Code entfernt einmalige und wiederkehrende Aufträge. Beachten Sie, dass bei wiederkehrenden Aufträgen nicht nur der Zeitplan oder das nächste Ereignis entfernt wird, sondern auch alle zukünftigen Ereignisse des Auftrags.

$timestamp = wp_next_scheduled('YOUR_NAME_HERE');
if ($timestamp) {
    wp_unschedule_event($timestamp, 'YOUR_NAME_HERE');
}

4. Wie man Cron-Jobs überwacht

#Link kopiert

Informationen über alle WordPress Cron-Jobs sind in der Datenbank gespeichert. Das bedeutet, dass wir eine Liste aller geplanten Jobs erhalten und sie verwalten können. Das ist eine wichtige Sache für Entwickler und Website-Betreiber.

Wenn Sie das WordPress-Datenbankschema gesehen haben, dann wissen Sie, dass es keine separate Tabelle für Cron gibt. Alle Cron-Aufgaben werden in einer einzigen Option in der Tabelle Options gespeichert. Wahrscheinlich kennen Sie diese Tabelle bereits, denn jeder gute WordPress-Entwickler kennt die wichtigsten Tabellen der WordPress-Datenbank. Dieses Wissen ist notwendig, um die internen Abläufe zu verstehen. Wenn Sie Ihr Wissen überprüfen und verbessern wollen, lesen Sie Was muss ein guter WordPress-Entwickler wissen.

WordPress speichert Cron-Aufgaben als Option in der Tabelle Optionen

Die serialisierten Daten direkt über PhpMyAdmin anzuschauen, ist jedoch nicht die beste Idee. Deshalb werden wir das WP Crontrol Plugin verwenden, das uns eine übersichtliche Benutzeroberfläche bietet. Mit diesem Tool können wir unsere Cron-Jobs debuggen oder externe, von Plugins hinzugefügte Jobs überprüfen. Wir haben zum Beispiel unseren eigenen Cron-Job erstellt und ihn sofort mit dem Tool ausgeführt, um sicherzustellen, dass er korrekt funktioniert.

Das Plugin bietet eine Schnittstelle für die Verwaltung der Cron-Jobs und der Intervalle. Die Verwendung ist recht einfach. Installieren und aktivieren Sie das Plugin und besuchen Sie dann den Punkt "Tools" - "Cron events" in Ihrem Admin-Menü.

Hier können Sie Cron-Jobs (genannt Cron-Ereignisse) und Cron-Intervalle (genannt Cron-Zeitpläne) verwalten.

Sie können jeden Auftrag einzeln steuern. Bewegen Sie den Mauszeiger auf das Zielobjekt, um die Liste der Aktionen zu sehen

5. Cron- und Cache-Plugins

#Link kopiert

Das Wichtigste, worauf Sie achten müssen, ist die Zusammenarbeit von WordPress Cron- und Cache-Plugins. Die meisten WordPress-Websites verwenden ein Cache-Plugin, um die Antwortzeit zu verringern. Insgesamt ist der Ansatz gut und wichtig für SEO. Außerdem bedeutet Cache eine Menge für WordPress-Geschwindigkeitsoptimierung. In unserem Fall bedeutet es aber auch, dass wir die PHP-Ausführung überspringen und HTML zurückgeben.

Standardmäßig verlässt sich WordPress Cron auf Benutzeranfragen. Ob WordPress Cron bei Anfragen an gecachte Seiten aufgerufen wird, hängt von dem verwendeten Plugin ab. Unserer Erfahrung nach rufen Cache-Plugins WordPress Cron nicht oder seltener auf als im Auslieferungszustand.

WordPress Cron wird immer noch aufgerufen, wenn der Redakteur das Dashboard besucht, aber das ist vielleicht nicht genug. Dieser Ansatz ist in Ordnung, wenn Ihre Cron-Jobs nicht wichtig sind und für längere Zeiträume verzögert werden können. Andernfalls sollten Sie den zweiten Teil des Artikels in Betracht ziehen.

Die im zweiten Teil des Artikels beschriebene Lösung, die Zusammenführung von System-Cron und WordPress-Cron, zeigt die klaren Vorteile auf, wer sie also schon so genutzt hat, braucht sich darum nicht mehr zu kümmern.

Die wp-cron.php Datei wird direkt aufgerufen und WordPress Cron funktioniert einwandfrei.

Abschluss

#Link kopiert

Wir haben die 5 wichtigsten Dinge über WordPress Cron besprochen. Wir empfehlen, den zweiten Teil (Zusammenführung von System-Cron und WordPress-Cron) für jede Ihrer WordPress-Seiten zu befolgen. Das wird Ihnen in Zukunft eine Menge Kopfschmerzen ersparen. Vergessen Sie auch nicht die Tools, mit denen Sie Ihre Cron-Jobs überwachen können. Sie sind sehr nützlich.

Wir hoffen, dass unser Artikel hilfreich für Sie war und dass Sie nun ein klares Bild von WordPress Cron haben und wissen, wie Sie Ihre eigenen Cron-Jobs mit Hilfe der Code-Snippets hinzufügen können.

Über den Autor
Maxim Akimov

Certified WordPress expert from Ukraine with over 8 years of experience. Advocate of the BEM methodology and the overall modular approach. Loves sporting activities and enjoys going to the gym and regularly plays table tennis.

0 Kommentare

    Hinterlassen Sie einen Kommentar

    Antwort an 

    Bitte seien Sie rücksichtsvoll, wenn Sie einen Kommentar hinterlassen.

    Nicht öffentlich gezeigt

    Got it