Cron ist ein Unix/Linux-Dienstprogramm, das in der Regel verwendet wird, um Befehle oder ein Skript auf einem Webserver zu planen, das im Hintergrund läuft. Ein Cron-Job ist die Aufgabe selbst, die dazu dient, Aufgaben zu bestimmten Zeiten, Daten oder Intervallen zu planen. In der Regel handelt es sich dabei um sich wiederholende Aufgaben, die automatisiert werden, um Zeit zu sparen. In WordPress wird dies von WP-Cron übernommen, das ein System-Cron simuliert.

Einige Beispiele für einen WordPress-Cron-Job sind das Planen der Veröffentlichung eines Beitrags oder die Ausführung eines Backup-Plugins nach einem vordefinierten Zeitplan. Heute werden wir uns ansehen, wie du ganz einfach einen WordPress-Cron-Job erstellen, ändern und ausführen kannst.

Wie man einen Cron Job in WordPress einrichtet

Es ist wichtig zu wissen, dass sich WP-Cron von einem System-Cron unterscheidet und beide ihre eigenen Vor- und Nachteile haben. WP-Cron verlässt sich zum Beispiel ganz auf Intervalle, während ein System-Cron auf bestimmte Zeiten angewiesen ist. Ein WP-Cron funktioniert außerdem nur, wenn die Seite geladen wird (Backend oder Frontend), was weniger zuverlässig sein kann. Die Standardintervalle von WordPress sind stündlich, zweimal täglich und täglich.

Um WP-Cron-Ereignisse zu planen, musst du eigene Hooks erstellen. Wir empfehlen dir, einen Blick in das offizielle WordPress Plugin-Handbuch zu werfen, das einen tollen Leitfaden für die Planung von WP-Cron-Ereignissen enthält. Wenn du nach einer alternativen Möglichkeit suchst, einen System-Cron mit WordPress einzurichten, empfehlen wir dir den Artikel von Tom Mcfarlin über die Definition eines WordPress-Cron-Jobs. Und für diejenigen, die vielleicht nicht so fortgeschritten sind, zeigen wir, wie du WP-Cron zusammen mit dem beliebten kostenlosen Plugin WP Crontrol verwenden kannst. Damit kannst du sehen und kontrollieren, was im WP-Cron-System passiert.

WP Crontrol WordPress Plugin
WP Crontrol

WP Crontrol hat über 200.000 aktive Installationen und eine beeindruckende Bewertung von 4,5 von 5 Punkten. Viele Leute in der WordPress-Community lieben dieses Plugin.

Dieses Plugin ist super nützlich. Es zeigt an, welche CRON-Jobs ausgeführt werden sollten. Ein hervorragender erster Schritt, um zu verstehen, was vor sich geht und ob es funktioniert oder nicht. 5 Sterne dafür. Außerdem kannst du neue Cron-Jobs erstellen und bestehende auslösen – 5 Bonus-Sterne obendrauf. – Josh, Erfinder von Caldera Forms

Du kannst es aus dem WordPress-Repository herunterladen oder in deinem WordPress-Dashboard unter „Neue Plugins hinzufügen“ danach suchen. Zu den Funktionen von WP Control:

  • Du kannst alle Cron-Ereignisse mit ihren Argumenten, der Wiederholung und der nächsten Laufzeit einsehen.
  • Alle Cron-Ereignisse bearbeiten, löschen und sofort ausführen.
  • Neue Cron-Ereignisse hinzufügen.
  • Hinzufügen, Bearbeiten und Entfernen von benutzerdefinierten Cron-Zeitplänen.

Server-Cron

Wenn du ein Kinsta-Kunde bist, haben wir auch einen Server-Cron-Job, der alle 15 Minuten auf allen Websites läuft. In unserem Artikel erfährst du, wie du die Server-Crons bei Kinsta verwalten kannst.

WP-Cron Zeitpläne

Wenn du das Plugin aktiviert hast, kannst du die WordPress Cron-Jobs in den Einstellungen deines WordPress-Dashboards unter „Cron Schedules“ ändern. Beachte, dass das Plugin einen zusätzlichen Standardzeitplan von wöchentlich hinzufügt. Du kannst auch zusätzliche Zeitpläne in Sekunden hinzufügen, z. B. 21600 Sekunden für alle 6 Stunden.

Screenshot von WP-Cron Zeitplänen
WP-Cron Zeitpläne

Diese Intervalle können auch mit Code hinzugefügt werden, indem du einen Filter verwendest, wie z.B.:

add_filter( 'cron_schedules', 'example_add_cron_interval' );

function example_add_cron_interval( $schedules ) {
 $schedules['five_seconds'] = array(
 'interval' => 5,
 'display' => esc_html__( 'Every Five Seconds' ),
 );

return $schedules;
 }

WP-Cron Ereignisse

Du kannst das Plugin auch verwenden, um deine aktuellen WordPress Cron-Jobs zu sehen, die bereits geplant sind. Klicke unter Tools auf „Cron Events“ Viele der Aktionsnamen sind leicht zu erkennen, da sie mit einem Teil des Pluginnamens übereinstimmen sollten, z. B. „woocoomerce_cleanup_sessions“ oder „gravityforms_cron“.

WP-Cron-Ereignisse
WP-Cron-Ereignisse

Du startest ein Cron-Ereignis sofort, indem du einfach auf „Jetzt ausführen“ neben dem Aktionsnamen klickst. Das kann bei der Fehlersuche hilfreich sein, da du ein Cron-Ereignis möglicherweise mehrmals ausführen musst.

Erfolgreich ausgeführtes Cron-Ereignis
Erfolgreich ausgeführtes Cron-Ereignis

Cron-Ereignis ändern

Du kannst auch bestehende Cron-Ereignisse bearbeiten, indem du neben dem Namen der Aktion auf „Bearbeiten“ klickst. Du kannst dann den Aktionsnamen, die Argumente, den nächsten Lauf und die geplante Wiederholung ändern. Sei dabei aber vorsichtig, denn viele Plugins sind auf ihre Cron-Jobs angewiesen, damit sie richtig funktionieren.

Cron-Ereignis ändern
Cron-Ereignis ändern

Cron-Ereignis hinzufügen

Du kannst auch Cron-Ereignisse hinzufügen. In diesem Beispiel fügen wir den WordPress-Cron-Job für das Disqus-Plugin hinzu. Viele möchten dies tun, um die Synchronisierungsfrequenz zu ändern oder wenn sie Probleme mit der Synchronisierung der Kommentare haben. In der Dokumentation jedes Plugin-Entwicklers sollte der Name des Cron-Ereignisses oder vielmehr der Name der Aktion stehen. In diesem Fall ist es dsq_sync_forum, das von dem Plugin verwendet wird.

Wenn du ein Plugin von Grund auf neu erstellst, brauchst du einen entsprechenden Aktionshaken irgendwo in deinem Code, z. B. in deiner functions.php-Datei. Das ist das Beispiel, das WP-Crontrol vorgibt:

add_action( 'my_hookname', 'my_function' );

Der nächste Schritt ist das Schreiben deiner Funktion.

function my_function() {
    wp_mail( '[email protected]', 'WP Crontrol', 'WP Crontrol rocks!' );
}

Für Disqus fügen wir zunächst einen neuen Cron-Zeitplan von 600 Sekunden (10 Minuten) hinzu. Dann klicken wir auf „Cron-Ereignis hinzufügen“ und geben „dsq_sync_forum“ als Aktionsnamen ein, wähle die nächste Ausführungszeit und die 10-minütige Wiederholung, die wir gerade erstellt haben. Dann klicke auf „Cron-Ereignis hinzufügen“ Die Aktion wird nun alle 10 Minuten automatisch ausgeführt, damit du die Disqus-Kommentare manuell mit unserer WordPress-Datenbank synchronisieren kannst.

WordPress Cron Job hinzufügen
WordPress Cron Job hinzufügen

Und das war’s auch schon! Es ist wirklich ziemlich einfach zu bedienen.

WP-Cron WP-CLI

Du kannst WP-Cron-Ereignisse und/oder einen WordPress-Cron-Job auch in WP-CLI verwalten. Der folgende Befehl zeigt dir zum Beispiel deine aktuelle Cron-Ereignisliste an.

wp cron event list
wp-cron Ereignisliste
wp-cron Ereignisliste

Weitere Befehle und Parameter findest du in der offiziellen WP-CLI cron-Dokumentation.

Hinzufügen eines Cron-Jobs mit cPanel

Wenn du einen Webhoster nutzt, der dir Zugang zu einem cPanel-Konto gibt, kannst du über das Control Panel Cron-Jobs einrichten. Dazu loggst du dich in dein cPanel-Konto ein und gehst zu Erweitert > Cron Jobs:

Cron Jobs in cPanel
Cron Jobs in cPanel

Auf der Einstellungsseite für Cron-Jobs findest du Optionen zum Einrichten von Cron-Job-Benachrichtigungen und zum Erstellen neuer Cron-Jobs. Um einen Cron-Job hinzuzufügen, scrolle nach unten zum Abschnitt Neuen Cron-Job hinzufügen.

Hier kannst du die Häufigkeit des Befehls einstellen:

Konfiguriere die Häufigkeit der Abfrage
Neuen Cron-Job hinzufügen

Das Menü Allgemeine Einstellungen enthält mehrere vorkonfigurierte Optionen, die von einmal pro Minute bis einmal pro Jahr reichen. Du kannst jede dieser Optionen verwenden oder die Felder unten ändern, um einen eigenen Wert einzugeben:

Benutzerdefinierte Werte eingeben
Benutzerdefinierte Werte eingeben

Sobald du die Häufigkeit des Cron-Jobs konfiguriert hast, kannst du den Befehl, der ausgeführt werden soll, in das Feld Befehl eingeben. Speichere den Cron-Job, indem du auf Neuen Cron-Job hinzufügen klickst. Jetzt erscheint er in der Liste der aktuellen Cron-Jobs unten auf der Seite.

So fügst du einen Cron-Job in NGINX hinzu

Das Hinzufügen eines Cron-Jobs in NGINX ist relativ einfach, wenn du dich mit dem Terminal und dem Schreiben von Skripten auskennst. Um loszulegen, öffne das Terminal und gib den folgenden Befehl ein:

Sudo crontab -e

Dadurch wird die cron-Konfigurationsdatei geöffnet. Jede Zeile in der Datei enthält einen eindeutigen Cron-Job, der wie folgt aussehen sollte:

0 13 * * * /var/www/public_html/cron.php >/dev/null

Um einen neuen Cron-Job in NGINX hinzuzufügen, musst du wissen, was dieser Befehl bewirkt. Die ersten Zahlen und Sternchen geben an, wann der Cron-Job laufen soll.

Jede Zahl oder jedes Symbol steht für die folgenden Werte, in der Reihenfolge von links nach rechts:

  1. Minute
  2. Stunde
  3. Tag des Monats
  4. Monat
  5. Tag der Woche

Dieser Befehl weist NGINX an, die Datei cron.php jeden Tag um Punkt 13 Uhr auszuführen. Wir verwenden Sternchen für die restlichen Werte, weil sie für diesen speziellen Cron-Job nicht notwendig sind, aber das kann bei dir anders sein.

Der Befehl gibt nicht nur an, welche Datei ausgeführt werden soll, sondern weist den Cron-Job auch an, alle Ausgaben wie Fehler mit dem Zusatz >/dev/null zu verwerfen. Alternativ kannst du auch festlegen, dass solche Ausgaben in einer Protokolldatei gespeichert werden.

Wenn du die cron-Konfigurationsdatei fertig bearbeitet hast, kannst du deine Änderungen speichern und die Datei schließen. Jetzt wird dein NGINX-Server den Cron-Job mit der von dir eingestellten Konfiguration ausführen.

So fügst du einen Cron-Job in Kinsta hinzu

Es gibt zwei Möglichkeiten, einen Cron-Job in Kinsta hinzuzufügen. Bei der ersten Methode greifst du über SSH auf deine Website zu und führst den Befehl crontab -e aus.

Nachdem du diesen Befehl ausgeführt hast, fragt Kinsta dich, welchen Editor du verwenden möchtest. Dann wird die Cron-Konfigurationsdatei mit diesem Editor geöffnet.

Du kannst der Konfigurationsdatei Cron-Jobs hinzufügen, indem du neue Befehle in separaten Zeilen erstellst. Ein Cron-Job-Befehl sollte wie folgt aussehen:

0 13 * * * /var/www/public_html/cron.php >/dev/null

Mehr über die Strukturierung von Cron-Befehlen erfährst du im vorherigen Abschnitt, in dem wir uns die Verwendung des Befehls crontab -e in NGINX angesehen haben. Wenn du den Cron-Job nicht manuell hinzufügen möchtest, kannst du den Kinsta-Support bitten, dies für dich zu tun.

Bedenke, dass Kinsta die Cron-Jobs nicht für dich bearbeiten kann und wir die Befehle einfach so hochladen, wie du sie uns zur Verfügung stellst. Wenn du Hilfe bei der Konfiguration des Cron-Befehls benötigst, empfehlen wir dir, die crontab-Dokumentation durchzulesen.

Wie man WP-Cron deaktiviert

In manchen Fällen kann die Verwendung der WP-Cron-Funktion zu Problemen mit deiner Website führen. WP-Cron ist kein „echter“ Cron-Job, sondern eine Funktion, die deren Funktionsweise imitiert. Anstatt kontinuierlich zu laufen, führt WordPress das Skript wp-cron.php jedes Mal aus, wenn eine Seite geladen wird.

Dieser Ansatz kann bei Websites mit hohem Datenverkehr zu Problemen führen, da du bei jedem Seitenaufruf Ressourcen für die Ausführung von wp-cron.php aufwenden musst. Wenn das Skript aufgrund von Seitenladungen nicht ausgeführt wird, werden deine geplanten Befehle möglicherweise nicht ausgeführt, da wp-cron.php die Intervalle nicht „überprüft“.

Wenn du Probleme mit WP-cron hast, kannst du die Funktion deaktivieren, indem du den folgenden Code in die WordPress-Datei wp-config.php einfügst:

define('DISABLE_WP_CRON', true);

Speichere die Änderungen in der Datei und das war’s. Wenn du dich dafür entscheidest, WP-Cron zu deaktivieren, musst du eine Alternative einrichten, indem du eine der vorherigen Methoden in diesem Tutorial anwendest.