Ich muss alle 5 Minuten eine Funktion ausführen. Ich habe folgendes aus dem Kodex erwähnt:
<?php wp_schedule_event(time(), 'hourly', 'my_schedule_hook', $args); ?>
Ich möchte diese Funktion nur alle 5 Minuten ausführen, unabhängig davon, wann ich anfangen soll. Wie kann ich das
Außerdem heißt es im Codex, dass cron ausgeführt wird, wenn ein Besucher die Site besucht. Gibt es eine Möglichkeit, den Cron wie pro Minute auszuführen und nicht auf einen Besuch zu warten?
Nehmen wir an, die folgende Funktion sollte alle 5 Minuten ausgeführt werden. Wie kann ich das mit wp_schedule_event()
oder tun wp_cron
?
function run_evry_five_minutes(){
// codes go here
}
functions.php
Antworten:
Sie können über cron_schedules neue Fahrplanzeiten anlegen:
Jetzt können Sie Ihre Funktion einplanen:
Um es nur einmal zu planen, schließen Sie es in eine Funktion ein und prüfen Sie, bevor Sie es ausführen:
Beachten Sie den Parameter $ args! Wenn Sie den Parameter $ args in wp_next_scheduled nicht angeben, aber $ args für wp_schedule_event haben, wird eine nahezu unendliche Anzahl desselben Ereignisses (statt nur eines) geplant.
Erstellen Sie abschließend die eigentliche Funktion, die Sie ausführen möchten:
Ich denke, es ist wichtig zu erwähnen, dass wp-cron bei jedem Laden einer Seite den Zeitplan überprüft und fällige geplante Jobs ausführt.
Wenn Sie also eine verkehrsarme Website haben, die nur 1 Besucher pro Stunde hat, wird wp-cron nur ausgeführt, wenn dieser Besucher Ihre Website durchsucht (einmal pro Stunde). Wenn Ihre Website mit vielen Besuchern pro Sekunde eine Seite anfordert, wird wp-cron jede Sekunde ausgelöst, wodurch der Server zusätzlich belastet wird.
Die Lösung besteht darin, wp-cron zu deaktivieren und über einen echten cron-Job in dem Zeitintervall auszulösen, in dem Sie den geplanten wp-cron-Job am schnellsten wiederholen (in Ihrem Fall 5 Minuten).
Lucas Rolff erklärt das Problem und gibt die Lösung im Detail.
Alternativ können Sie einen kostenlosen Drittanbieter-Service wie UptimeRobot verwenden , um Ihre Site alle 5 Minuten abzufragen (und wp-cron auszulösen), wenn Sie wp-cron nicht deaktivieren und es über einen echten cron-Job auslösen möchten.
quelle
Wenn Ihre Site stark frequentiert wird, können Sie versuchen
set_transient()
, sie (ungefähr) alle 5 Minuten auszuführen. Beispiel:quelle
functions.php
wenn ein Besuch auf der Seite stattfindet. Eine Tabelle in meiner Datenbank wird aktualisiertfunction run_evry_five_minutes() { $homepage = file_get_contents('link to visit'); echo $homepage; }
. Die DB-Tabelle wird jedoch auch nach 6 Minuten nicht aktualisiert.get_transient()
/set_transient()
ohne cron Sachen macht viel mehr Sinn, viel einfacher wird Antwort aktualisieren ...Sie können es in der Plugin-Aktivierung auslösen, anstatt bei jedem Plugin-Aufruf:
quelle
Ich fürchte, außer darauf zu warten, dass jemand Ihre Site besucht, auf der eine Funktion ausgeführt wird, besteht die einzige andere Möglichkeit darin, einen Cron-Job auf Ihrem Server mit so etwas wie /programming/878600/how einzurichten -to-create-cronjob-using-bash oder wenn Sie eine Oberfläche im Cpanel-Stil auf Ihrem Server haben, gibt es manchmal eine GUI, um dies einzurichten.
quelle
functions.php
da wir Clients nicht bitten können, ein Cron aus cpanel einzurichten, wenn sich die Funktion in aplugin
oder infunctions.php
befindet auf eigene Faust ..Mit dem Cronjob Scheduler- Plugin können Sie häufige Aufgaben zuverlässig und zeitnah ausführen, ohne dass jemand Ihre Site besuchen muss. Sie benötigen lediglich 1 Aktion und einen Unix Crontab-Zeitplan.
Es ist sehr einfach zu bedienen und sehr flexibel. Sie erstellen Ihre eigene Funktion und definieren darin eine Aktion. Dann können Sie Ihre Aktion aus dem Plugin-Menü auswählen und sie starten, wann immer Sie möchten.
quelle
Ich habe eine mögliche Lösung mit einer Schedule-Funktion und einer rekursiven WP Ajax-Funktion.
file_get_contents()
Wenn der Zähler gleich oder höher als 60 ist, wird der Zähler zurückgesetzt und auf den nächsten Cron-Job gewartet.
Wenn der Zähler ein Vielfaches von 5 ist (also alle 5 Minuten), wird die gewünschte Funktion ausgeführt
Und abgesehen von den Bedingungen wird es 59 Sekunden lang schlafen
sleep(59);
(vorausgesetzt, Ihre Funktion ist schnell). Nach dem Schlaf löst es sich mitfile_get_contents()
erneut aus.Wichtige Dinge zu beachten:
set_time_limit(90);
, um zu verhindern, dass der Server Ihre Funktion vor dem Ruhezustand unterbrichtEs ist eine Lösung, keine gute, und sie wird möglicherweise vom Server blockiert. Mit einem externen Cron können Sie eine einfache Funktion einstellen. Der Server verwendet die Ressourcen alle 5 Minuten einmal. Mit dieser Lösung verwendet der Server die ganze Zeit Ressourcen.
quelle
Die richtige Antwort von @ johano erklärt, wie ein benutzerdefiniertes Intervall für den WP-Cron-Job eingerichtet wird. Die zweite Frage wird jedoch nicht beantwortet. So wird jede Minute ein Cron ausgeführt:
Fügen Sie der Datei
wp-config.php
den folgenden Code hinzu:Einen Cron-Job hinzufügen (
crontab -e
unter Unix / Linux):Der erste Teil (Schritt 1) deaktiviert den internen Cron-Job von WordPress. Im zweiten Teil (Schritt 2) wird der WordPress-Cron-Job jede Minute manuell ausgeführt.
Mit der Antwort von @ Johano (Ausführen eines Tasks alle 5 Minuten) und meiner (Manuelles Ausführen des Cron) sollten Sie in der Lage sein, Ihr Ziel zu erreichen.
quelle