Ich habe WordPress Multisite mit mehreren Websites. Ich setze DISABLE_WP_CRON
auf true
in meinem wp-config.php
.
Wenn wir eine Cron-Task mit wget oder curl einrichten, haben wir eine 30-Sekunden-Regel, um PHP-Skripte auszuführen. Es ist so klein, Unmengen von E-Mail-Benachrichtigungen zu senden und andere Aufgaben zu erledigen (möglicherweise ist die SMTP-Remoteserververbindung langsam, möglicherweise sind es wirklich viele E-Mail-Benachrichtigungen von bbPress oder so).
Vielleicht können wir so etwas verwenden?
php -q wp-cron.php
In Multisite wird jedoch nur cron für eine Site ausgeführt (jede Site hat ihre eigenen cron-Tasks in verschiedenen MySQL-Tabellen).
PS Auf wpmudev.org Forum fand ich seltsame "Lösung", die auch Curl verwenden.
Eine andere PS WP CLI hat tolle wp cron
Befehle , erlaubt aber nur das manuelle Ausführen von Cron-Tasks (yep, wir können --url
attr verwenden). Beispielsweise:
wp cron event list --url=multisite.com
wp cron event list --url=subdomain.multisite.com
WP-CLI
Kerncode angesehen?wp
/ WP-CLI in IhremPATH
? Wenn ja, warum nicht aus einer Bash-Datei auslösen, die in Cron ausgeführt wird?Antworten:
Ich denke, der beste Weg ist, WP-CLI zu verwenden, aber Sie müssten ein Bash-Skript schreiben, um dies zu tun. Hier ist eine, die es für Sie tun sollte:
Sie müssten dieses Skript dann zu crontab hinzufügen und es möglicherweise jede Minute ausführen, wenn Sie möchten
quelle
wp cron event run --due-now --url="$SITE_URL" --path="$WP_PATH
- Lautrun
Dokumentation sollten Sie das--due-now
Flag verwenden. Dies würde die Suche und die einzelnen Ereignisaufrufe verringern. Siehe: wp-cli.org/commands/cron/event/run . Auf jeden Fall arbeite ich mit @OmarJackman - er nutzt die Befehlszeile, um WordPress-Befehlszeilentools zu verwenden. Requisiten für ein sauberes Bash-Beispiel. Sie können diese Antwort abrunden, indem Sie den Eintrag crontab anzeigen.WP_PATH="/path/to/wp"; for SITE_URL in $(wp site list --fields=domain,path,archived,deleted --format=csv --path="$WP_PATH" | grep ",0,0$" | awk -F ',' '{print $1 $2}'); do wp cron event run --due-now --url="$SITE_URL" --path="$WP_PATH"; done
Nachdem Sie die Konstante hinzugefügt haben
wp-config.php
WP-CLI
Und vorausgesetzt, Sie haben Ihr
config.yml
Setup korrekt, können Sie das--path
Flag beim Aufruf weglassencron run
.So führen Sie alle fälligen Cron-Tasks in der angegebenen Reihenfolge aus:
function run_crons_due_now_in_order { for SITE_URL in $(wp site list --fields=url --format=csv | tail -n +2 | sort); do wp cron event run --due-now --url="$SITE_URL" && echo -e "\t+ Finished crons for $SITE_URL"; done; echo "Done"; }; run_crons_due_now_in_order;
Wenn Sie möchten, dass sie gleichzeitig ausgeführt werden (zuerst das nicht standortspezifische Cron ausführen):
function run_all_crons_due_now { for SITE_URL in $(wp site list --fields=url --format=csv | tail -n +2 | sort); do wp cron event run --due-now --url="$SITE_URL" && echo -e "\t+ Finished crons for $SITE_URL" & done; wait $(jobs -p); echo "Done"; }; run_all_crons_due_now;
Sie möchten eine der beiden Optionen in eine ausführbare Datei einfügen
Fügen Sie eine Crontab-Aufgabe hinzu
und wahrscheinlich jede Minute ausführen
Wenn Sie einen benutzerdefinierten Befehl von cron ausführen möchten , müssen Sie möglicherweise die vollständigen Pfade angeben, damit wp-cli funktioniert.
PHP
Der einzige Grund, warum Sie WordPress hier laden müssen, ist, die URLs aus der Datenbank zu sammeln, anstatt eine vordefinierte Liste zu verwenden. Wir werden nur diese URLs pingen und es ist uns egal, wie die Antwort lautet.
Und fügen Sie einen einzelnen Anruf
custom-cron.php
in einer Crontab hinzuquelle
Einfacherer Einzeiler mit weniger Druck:
wp site list --field=url | xargs -i -n1 wp cron event run --due-now --url="{}"
Sie können es entweder manuell ausführen oder in ein Skript einfügen und wie in den anderen Antworten von cron aus aufrufen.
quelle
Das ist meine Lösung:
Wir nennen das crontab, hoffe es hilft
quelle
Ich denke, Sie müssen uns in erster Linie sagen, was Sie unter "wp-cron.php richtig ausführen" verstehen. Laut Wordpress macht es keinen Sinn, dass Sie wp-cron deaktivieren und dennoch ausführen möchten ... Aus Linux-Sicht wäre wget-ing oder / bin / php-ing wp-cron.php richtig, aber es scheint, dass Ihr spezieller Host Ihre Anzahl von PHP-Aufrufen aus Sicherheitsgründen begrenzt? - Dieser Teil ergibt sich nicht ganz aus Ihrer Beschreibung.
Eine andere Frage: Wie viele E-Mails sind "eine Tonne"? Es gibt gute Gründe, warum Sie nicht versuchen sollten, so schnell zu viele E-Mails zu senden.
Möglicherweise müssen Sie Ihre Ziele überdenken.
(Ich würde kommentieren, anstatt zu antworten, aber ich habe nicht genug Reputation auf wpstack.)
quelle
DISABLE_WP_CRON
, diese Methode zu deaktivieren, wenn Sie stattdessen die zuverlässigere System-Cron-Methode einrichten.