Mam funkcję do uruchomienia co 5 minut. Odniosłem się z następującego kodeksu:
<?php wp_schedule_event(time(), 'hourly', 'my_schedule_hook', $args); ?>
Chcę uruchamiać tę funkcję co 5 minut, niezależnie od tego, kiedy zacząć. Jak mogę to zrobić?
Również kodeks mówi, że cron zostanie uruchomiony, gdy odwiedzający odwiedzi witrynę. Czy jest jakiś sposób na uruchomienie crona tak samo jak na minuty i nie czekanie na wizytę?
powiedzmy, że następującą funkcję należy uruchamiać co 5 minut. Jak mogę to zrobić za pomocą wp_schedule_event()
lub wp_cron
?
function run_evry_five_minutes(){
// codes go here
}
functions.php
Odpowiedzi:
Możesz utworzyć nowy harmonogram według cron_schedules:
Teraz możesz zaplanować swoją funkcję:
Aby zaplanować tylko raz, zawiń go w funkcję i sprawdź przed uruchomieniem:
Zwróć uwagę na parametr $ args! Brak określenia parametru $ args w wp_next_scheduled, ale posiadanie $ args dla wp_schedule_event, spowoduje zaplanowanie prawie nieskończonej liczby tego samego zdarzenia (zamiast tylko jednego).
Na koniec utwórz rzeczywistą funkcję, którą chcesz uruchomić:
Myślę, że należy wspomnieć, że wp-cron sprawdza harmonogram i wykonuje zaplanowane zadania za każdym razem, gdy strona jest ładowana.
Tak więc, jeśli masz witrynę o niskim natężeniu ruchu, która ma tylko 1 gościa na godzinę, wp-cron będzie działał tylko wtedy, gdy ten użytkownik będzie przeglądał twoją stronę (raz na godzinę). Jeśli masz witrynę o dużym ruchu, odwiedzający co sekundę żądają strony, wp-cron będzie uruchamiany co sekundę, powodując dodatkowe obciążenie serwera.
Rozwiązaniem jest dezaktywacja wp-cron i uruchomienie go za pomocą prawdziwego zadania cron w przedziale czasowym najszybszego powtarzania zaplanowanego zadania wp-cron (w twoim przypadku 5 minut).
Lucas Rolff wyjaśnia problem i szczegółowo opisuje rozwiązanie.
Alternatywnie możesz skorzystać z bezpłatnej usługi innej firmy, takiej jak UptimeRobot, aby sprawdzać witrynę (i wyzwalać wp-cron) co 5 minut, jeśli nie chcesz dezaktywować wp-cron i uruchamiać go za pomocą prawdziwego zadania cron.
źródło
Jeśli Twoja witryna ma duży ruch, możesz spróbować
set_transient()
uruchomić ją (bardzo w przybliżeniu) co 5 minut, np .:źródło
functions.php
podczas wizyty na stronie, aktualizacja tabeli zostanie wykonana w mojej bazie danychfunction run_evry_five_minutes() { $homepage = file_get_contents('link to visit'); echo $homepage; }
. Ale tabela DB nie jest aktualizowana nawet po 6 minutach.get_transient()
/set_transient()
bez crona ma znacznie więcej sensu, o wiele prostsze, zaktualizuje odpowiedź ...Możesz aktywować go podczas aktywacji wtyczki zamiast przy każdym wywołaniu wtyczki:
źródło
Obawiam się, że oprócz czekania, aż ktoś odwiedzi Twoją witrynę, na której działa funkcja, jedyną inną opcją jest skonfigurowanie zadania cron na serwerze przy użyciu czegoś takiego: /programming/878600/how -to-create-cronjob-using-bash lub jeśli masz na swoim serwerze interfejs w stylu cpanel, czasem jest jakiś GUI do skonfigurowania tego.
źródło
functions.php
ponieważ gdy funkcja jest wplugin
lub w,functions.php
nie możemy prosić klientów o skonfigurowanie crona z cpanel na własną rękę ..Cronjob Harmonogram Wtyczka pozwala na uruchamianie częste zadania rzetelnie i terminowo, bez nikogo konieczności odwiedzania witryny, co potrzebne jest co najmniej 1 akcja i harmonogram Unix Crontab.
Jest bardzo łatwy w użyciu i bardzo elastyczny. Tworzysz własną funkcję i definiujesz w niej akcję. Następnie możesz wybrać akcję z menu wtyczki i uruchomić ją w dowolnym momencie.
źródło
Mam możliwe rozwiązanie za pomocą funkcji harmonogramu i rekurencyjnej funkcji WP Ajax.
file_get_contents()
Jeśli licznik jest równy lub wyższy niż 60, resetuje licznik i oczekuje na następne zadanie cron.
Jeśli licznik wielokrotności 5 (czyli co 5 minut), wykona żądaną funkcję
Poza warunkami będzie spał przez 59 sekund
sleep(59);
(zakładając, że twoja funkcja jest szybka). Po śnie uruchomi sięfile_get_contents()
ponownie.Ważne rzeczy do zapamiętania:
set_time_limit(90);
aby uniemożliwić serwerowi przerwanie funkcji przed snemTo rozwiązanie nie jest dobre i może zostać zablokowane przez serwer. Za pomocą zewnętrznego crona możesz ustawić prostą funkcję, a serwer będzie zużywał na nim zasoby co 5 minut. Korzystając z tego rozwiązania, serwer będzie cały czas zużywał na nim zasoby.
źródło
Odpowiedź @ johano poprawnie wyjaśnia, jak ustawić niestandardowy interwał dla zadania WP cron. Na drugie pytanie nie ma odpowiedzi, czyli jak uruchomić cron co minutę:
W pliku
wp-config.php
dodaj następujący kod:Dodaj zadanie crona (
crontab -e
na unix / linux):Pierwsza część (krok 1) wyłączy zadanie wewnętrznego crona WordPress. Druga część (krok 2) będzie ręcznie uruchamiać zadanie cron WordPress co minutę.
Z odpowiedzią @ Johano (jak uruchomić zadanie co 5 minut) i moją (jak ręcznie uruchomić crona), powinieneś być w stanie osiągnąć swój cel.
źródło