Dlaczego zaplanowane wpisy się spóźniają, a maile ze sklepu wychodzą falami. Jak działa WP-Cron i jak w 15 minut zastąpić go cronem systemowym w DirectAdmin.
WP-Cron to wewnętrzny harmonogram WordPressa: publikuje zaplanowane wpisy, wysyła maile ze sklepu, robi kopie z wtyczek, czyści kosz. Problem w tym, że wcale nie jest cronem - nie odmierza czasu. Uruchamia się tylko wtedy, gdy ktoś wejdzie na stronę. Ta jedna konstrukcyjna decyzja odpowiada za dwa pozornie przeciwne problemy: na stronach z małym ruchem zadania się spóźniają, a na stronach z dużym ruchem WP-Cron dokłada się do każdego żądania i spowalnia serwis.
W tym poradniku tłumaczymy, jak ten mechanizm działa naprawdę, po czym poznać, że sprawia kłopoty, i jak w kwadrans zastąpić go prawdziwym cronem systemowym - z gotową konfiguracją dla panelu DirectAdmin.
Przy każdej odsłonie strony WordPress sprawdza listę zaplanowanych zadań. Jeśli któremuś minął termin, dokleja do bieżącego żądania dodatkowe wywołanie pliku wp-cron.php, które te zadania wykonuje. Kluczowe konsekwencje:
To rozwiązanie genialne w swojej przenośności (działa na każdym hostingu bez konfiguracji) i słabe wydajnościowo. Dlatego standardem na poważnych stronach jest wyłączenie trybu wbudowanego i wywoływanie wp-cron.php z zewnątrz, o stałych porach.
| Objaw | Mechanizm |
|---|---|
| zaplanowane wpisy pokazują „Missed schedule" / „pominięto zaplanowanie" | nikt nie wszedł na stronę o czasie publikacji |
| maile ze sklepu wychodzą z opóźnieniem, falami | kolejka czeka na odsłonę, potem wykonuje się hurtem |
| losowe pojedyncze odsłony trwają kilka sekund, reszta jest szybka | pechowy gość „wylosował" wykonanie ciężkiego zadania |
| wtyczka backupu kończy pracę w środku dnia zamiast w nocy | start zadania czekał na poranny ruch |
| na wykresach obciążenia piły dokładnie co godzinę w godzinach ruchu | skumulowane zadania interwałowe |
Listę zaplanowanych zadań podejrzysz wtyczką WP Crontrol (kokpit - Narzędzia - Cron Events) albo poleceniem wp cron event list przez SSH - więcej takich poleceń zebraliśmy w praktycznym przewodniku po WP-CLI. Już sam podgląd bywa pouczający: instalacje z długą historią potrafią mieć wpisy po dawno usuniętych wtyczkach, wykonywane co godzinę w pustkę.
W pliku wp-config.php, powyżej linii „That's all, stop editing!", dodaj:
define('DISABLE_WP_CRON', true);
Ta stała nie wyłącza harmonogramu - wyłącza tylko doklejanie wykonania do odsłon. Zadania dalej czekają w kolejce; od teraz wykona je wyłącznie bezpośrednie wywołanie pliku wp-cron.php. Dlatego ten krok bez kroku drugiego oznacza stronę, na której przestają działać wszystkie automaty - nie przerywaj konfiguracji w połowie.
W panelu DirectAdmin wejdź w sekcję zadań cron (Advanced Features - Cron Jobs). Dodaj nowe zadanie:
Interwał: co 5 minut (w polach minut wpisz */5, pozostałe pola gwiazdki).
Polecenie - najpewniejszy wariant przez WP-CLI:
cd /home/UZYTKOWNIK/domains/TWOJADOMENA.pl/public_html && wp cron event run --due-now >/dev/null 2>&1
Wariant alternatywny przez HTTP (gdy wolisz nie zależeć od WP-CLI):
curl -s https://twojadomena.pl/wp-cron.php?doing_wp_cron >/dev/null 2>&1
Różnica praktyczna: wariant WP-CLI działa nawet wtedy, gdy strona jest schowana za hasłem albo blokadą IP, i nie przechodzi przez cache. Wariant curl jest prostszy, ale musi mieć drożną drogę po HTTP. Końcówka >/dev/null 2>&1 wycisza wyjście - bez niej panel będzie słał mail po każdym wykonaniu, czyli 288 wiadomości dziennie.
Nawigację po panelu, łącznie z sekcją cron, znajdziesz w przewodniku po DirectAdmin.
Co 5 minut to rozsądny standard - wystarcza dla sklepów (maile, statusy zamówień), publikacji planowanych i typowych wtyczek. Częściej niż co minutę nie schodź: WordPress i tak grupuje zadania, a zbyt częste wywołania to puste obroty.
Wyjątki w obie strony: mała wizytówka bez sklepu spokojnie zniesie interwał co 15-30 minut; z kolei sklep z bramką płatności czekającą na potwierdzenia webhookiem nie potrzebuje częstszego crona z tego powodu - webhooki przychodzą własną drogą, niezależną od WP-Cron.
Po kwadransie od ustawienia:
wp cron event list nie powinno pokazywać pozycji z czasem w przeszłości;DISABLE_WP_CRON bez skonfigurowanego crona. Klasyka: ktoś wkleił stałą „bo tak radzą w poradniku o szybkości", cron systemowy nigdy nie powstał, a po dwóch tygodniach sklep „przestał wysyłać maile". Jeśli przejmujesz stronę po kimś, sprawdź obie strony układanki naraz.
Cache przed wp-cron.php. Przy wariancie curl upewnij się, że adres wp-cron.php nie jest serwowany z cache (LiteSpeed Cache domyślnie go omija, ale reguły własne potrafią to zepsuć). Odpowiedź z cache = zadania nie ruszają, choć cron „działa".
Ciężkie zadania wtyczek o pełnych godzinach. Prawdziwy cron wykonuje zadania punktualnie - także wtedy, gdy pięć wtyczek zaplanowało swoje ciężkie prace równo na pełną godzinę. Gdy widzisz piłę obciążenia co 60 minut, rozstrzel harmonogramy (WP Crontrol pozwala zmienić czas zdarzenia) albo przenieś backupy na porę nocną. Ma to znaczenie zwłaszcza w kontekście limitów kont na hostingu współdzielonym.
Osierocone zadania po usuniętych wtyczkach. Wpisy w harmonogramie zostają po odinstalowaniu wtyczki i co interwał próbują wywołać nieistniejący kod. WP Crontrol pokazuje je jako zadania bez akcji - usuń je ręcznie.
Strefa czasowa. Cron systemowy chodzi według czasu serwera, harmonogram WordPressa według strefy ustawionej w kokpicie. Przy interwale co 5 minut to bez znaczenia, ale gdy ustawiasz zadanie „raz dziennie o 3:00" bezpośrednio w cronie, upewnij się, o czyją godzinę trzecią chodzi.
WP-Cron w trybie wbudowanym to kompromis: działa wszędzie, ale czas wykonania zadań uzależnia od ruchu i dokłada pracę do odsłon. Zamiana na cron systemowy to 15 minut: jedna stała w wp-config.php, jedno zadanie co 5 minut w DirectAdmin, krótka weryfikacja. Od tej chwili publikacje wychodzą punktualnie, maile ze sklepu nie czekają na gościa, a odwiedzający nigdy nie płacą czasem ładowania za backup wtyczki.
Na naszym hostingu cron jest dostępny w każdym pakiecie, a jeśli wolisz, żebyśmy skonfigurowali to za Ciebie - napisz, ustawimy przy okazji darmowej migracji.
Wszystkie poradniki z kategorii: Szybkość i wydajność