Es gibt keinen Nachteil, WP CRON mithilfe der Cron-Jobs des Servers auszuführen. In der Tat ist dies die empfohlene Praxis.
Laut offiziellem WordPress Plugin Development Document :
WP-Cron wird nicht kontinuierlich ausgeführt. Dies kann ein Problem sein, wenn wichtige Aufgaben rechtzeitig ausgeführt werden müssen. Hierfür gibt es eine einfache Lösung. Richten Sie einfach den Taskplaner Ihres Systems so ein, dass er in den gewünschten Intervallen (oder zum gewünschten Zeitpunkt) ausgeführt wird.
Dazu müssen Sie zuerst das Standard-Cron-Verhalten deaktivieren in wp-config.php
:
define('DISABLE_WP_CRON', true);
Planen Sie dann wp-cron.php
von Ihrem Server aus. Für Linux bedeutet das:
crontab -e
Führen Sie es jedoch nicht in der Befehlszeile (CLI) aus, sondern als HTTP-Anforderung. Dafür können Sie verwenden wget
:
*/5 * * * * wget -q -O - https://your-domain.com/wp-cron.php?doing_wp_cron
WordPress lädt alle erforderlichen Kerndateien, Plugins usw. wp-cron.php
mit dem folgenden CODE:
if ( !defined('ABSPATH') ) {
/** Set up WordPress environment */
require_once( dirname( __FILE__ ) . '/wp-load.php' );
}
Machen Sie sich also keine Sorgen, dass WordPress keine wichtigen Funktionen lädt.
wget http://YOUR_SITE_URL/wp-cron.php
ohne Erwähnung mit Erwähnungen verknüpft haben.?doing_wp_cron
Ist also eine besser als die andere? Was macht das Hinzufügen von?doing_wp_cron
, was die Nicht-Version nicht tut?define('DISABLE_WP_CRON', true);
Deaktiviert nur diesen Teil des Cron-Prozesses und ruft dann das Cron-Skript mit dem folgenden Code auf:*/5 * * * * wget -q -O - https://your-domain.com/wp-cron.php?doing_wp_cron
Auf dem Server wird sichergestellt, dass Cron-Jobs ausgeführt werden. Jedes Planungs-Plugin kennt nicht einmal den Unterschied.Es gibt ein paar Nachteile: Erstens, wenn Sie wp-cron.php als CLI verwenden, werden Dinge wie $ _SERVER-Variablen nicht festgelegt. Menschen überwinden diese Einschränkung, indem sie stattdessen eine Curl-Anfrage an wp-cron.php verwenden.
Zweitens, weil WP selbst nicht mit wp-cron.php geladen ist; Wenn Sie ein SMTP-Mailer-Plugin verwenden, wird dieses beim Aufruf von wp-cron nicht geladen. Die Verwendung eines Curl-Aufrufs überschreibt dieses Problem erneut. Curl scheint die am häufigsten verwendete Methode zu sein.
Jedoch; Ich bevorzuge die Verwendung von wp-cli, nachdem ich die Mail-Einstellungen in postfix und (für nginx) php-fpm config korrekt festgelegt und eine crontab wie z
(Listen Sie alle Crones mit bestimmten Feldern im CSV-Format auf - Hook ist der Name des Cron, der nächste relative Lauf ist die Zeit. Entfernen Sie diejenigen, die "jetzt" als nächsten Lauf (die jetzt fällig sind) mit AWK anzeigen, und übergeben Sie diese Liste an xargs an Rufen Sie
wp cron event run $HOOK
jedes Cron auf.) Wenn Sie wp-cli verwenden, wird WordPress korrekt geladen. (Ich überspringe Plugins, wenn ich die Cron aufführe, da Code-Erros und PHP-Warnungen die Skriptausgabe vermasseln, aber nicht überspringen, wenn das Cron mit xargs ausgeführt wird Für den Cron müssen möglicherweise die Plugins geladen werden.Ich hoffe, dies gibt Ihnen einige Hinweise, worauf Sie achten müssen.
quelle
Es gibt viele Gründe, den wp-cron nicht zu deaktivieren. Tatsächlich ist es fast unmöglich, einen Anwendungsfall dafür zu finden. Es verlangsamt Ihre Website nicht und wird für Dinge verwendet, die Sie möglicherweise nicht kennen.
Viele Plugins verwenden das WP-Cron, um Dinge zu planen. Sie können verwirrt werden, wenn Sie den Scheduler ausschalten.
Es gibt eine Vielzahl von Tutorials zu diesem Thema, weil es verwirrend ist und weil es Ihrer Website nicht viel bringt, wenn Sie es deaktivieren. Was es tun wird, ist, dem Entwickler Kopfschmerzen zu bereiten, der das mysteriöse Problem beheben muss, das es in sechs Monaten verursacht.
Außerdem wird der WP Heartbeat alle 15 Sekunden im Admin-Bereich ausgelöst, wodurch dieses Problem für 99% der Personen behoben wird, die glauben, es zu haben.
quelle
Ich muss noch einen echten Nachteil finden, wenn ich wp-cron an einen externen Dienst auslagere. Das schon seit vielen Jahren.
Besonders in der heutigen Welt, in der Sie Anwendungen als Microservices ausführen können.
Ich verwende separate Docker-Container für jede WordPress-Komponente (PHP, Web, DB, Crontab, Redis usw.). Crontab als separaten Container haben, wp-cron über http über ein lokales Netzwerk aufrufen und nur dann ausführen, wenn ich es brauche.
Dies reduziert die Belastung der Backend-Knoten und verbessert die Sicherheit durch eine kleinere Angriffsfläche.
Wenn der Entwickler nicht herausfinden kann, wie man Dinge macht, ohne wp-cron bei jedem Laden der Seite aufrufen zu müssen, spricht dies nur für Unerfahrenheit in seinem Namen. "Lass es in Ruhe", weil du nicht verstehst, wie die Dinge funktionieren, ist kein guter Grund, es zu behalten.
quelle