Najprostszy sposób na zastąpienie WP-Cron cronem systemowym to wyłączenie domyślnego mechanizmu w pliku wp-config.php, a następnie dodanie w panelu hostingu zadania wywołującego wp-cron.php według ustalonego harmonogramu. Dzięki temu zadania WordPressa nie zależą od wizyt użytkowników i nie obciążają przypadkowych żądań strony.
WP-Cron a cron systemowy – skąd wynika różnica?
WP-Cron jest wbudowanym harmonogramem zadań WordPressa. Sprawdza zaplanowane akcje przy wywołaniu strony lub panelu administracyjnego. Gdy witryna ma mały ruch, zadanie może wykonać się z opóźnieniem. Przy większej liczbie odwiedzin każde żądanie może z kolei uruchomić dodatkową pracę PHP i bazy danych.
Cron systemowy działa po stronie serwera i korzysta z jego zegara. Może wywoływać WordPressa na przykład co 5 minut, niezależnie od tego, czy ktoś odwiedza stronę. Rozwiązanie wymaga jednorazowej konfiguracji w panelu hostingu, ale zapewnia bardziej przewidywalne działanie.
| Cecha | WP-Cron | Cron systemowy |
|---|---|---|
| Mechanizm uruchomienia | Wywołanie WordPressa przez żądanie HTTP | Harmonogram serwera |
| Przewidywalność | Zależy od ruchu na stronie | Działa według ustalonego czasu |
| Wpływ na serwer | Może obciążać żądania użytkowników | Oddziela zadania techniczne od ruchu na stronie |
Zmiana jest szczególnie odczuwalna w sklepach WooCommerce, witrynach korzystających z importów, synchronizacji API i rozbudowanych wtyczek. Na małej stronie wizytówkowej domyślny WP-Cron często wystarcza, ale przy większej liczbie zadań cron systemowy daje lepszą kontrolę nad momentem ich wykonania.
Jak wyłączyć WP-Cron w pliku wp-config.php?
Wyłączenie wewnętrznego harmonogramu wymaga dodania jednej stałej do pliku konfiguracyjnego WordPressa.
Przed edycją utwórz kopię zapasową pliku wp-config.php. Błąd składni lub przypadkowe usunięcie istniejącej konfiguracji może spowodować problemy z działaniem strony.
- Otwórz katalog główny instalacji WordPressa, często oznaczony jako
public_html. - Znajdź plik
wp-config.phpi otwórz go w edytorze dostępnym w panelu hostingu albo pobierz go przez SFTP. - Dodaj poniższą linię przed komentarzem
/* That's all, stop editing! Happy publishing. */:
define('DISABLE_WP_CRON', true);
Nie umieszczaj tej stałej po wskazanym komentarzu. Zapisz plik i sprawdź, czy strona oraz panel administracyjny nadal działają poprawnie. Samo wyłączenie WP-Cron nie uruchamia jeszcze zadań zastępczych, dlatego następny krok jest konieczny.
Jak skonfigurować cron systemowy?
Nazwa i układ sekcji zależą od dostawcy hostingu. W DirectAdmin zwykle znajdziesz ją jako Zadania CRON, a w cPanel jako Cron Jobs. W OVHcloud lub innych panelach mogą występować podobne formularze, lecz zasada pozostaje taka sama.
- Zaloguj się do panelu hostingu i otwórz sekcję dotyczącą zadań cron.
- Dodaj nowe zadanie i wybierz częstotliwość, na przykład co 5 lub 15 minut. Nie zostawiaj domyślnego uruchamiania co minutę, jeśli nie jest ono potrzebne.
- W polu komendy wpisz wywołanie pliku
wp-cron.php, zastępując domenę własnym adresem:
wget -q -O - https://twojadomena.pl/wp-cron.php >/dev/null 2>&1
Opcjonalnie możesz użyć narzędzia curl:
curl -s https://twojadomena.pl/wp-cron.php >/dev/null 2>&1
Adres musi prowadzić do tej samej instalacji WordPressa, w której wyłączono WP-Cron. Parametry harmonogramu ustaw w formularzu panelu, a nie w adresie URL. Jeśli hosting wymaga pełnej ścieżki do programu, zamiast wget wpisz ścieżkę podaną przez dostawcę, na przykład /usr/bin/wget.
Fragment >/dev/null 2>&1 przekierowuje standardowy wynik oraz komunikaty błędów do urządzenia, które je odrzuca. Bez tego cron może wysyłać wiadomości e-mail przy każdym uruchomieniu albo zapisywać duże ilości danych w logach. Podczas diagnozowania problemu możesz tymczasowo skierować wynik do pliku, na przykład:
wget -q -O - https://twojadomena.pl/wp-cron.php >>/home/USER/cron.log 2>&1
Ścieżka /home/USER/cron.log jest tylko przykładem i musi odpowiadać strukturze Twojego konta. Po zapisaniu zadania odczekaj co najmniej jeden pełny interwał i sprawdź logi hostingu. Niektóre panele pokazują ostatnie wykonanie oraz kod zakończenia zadania.
Na co uważać podczas konfiguracji?
Jeżeli cron nie wywołuje WordPressa albo zadanie kończy się błędem, sprawdź kolejno najczęstsze przyczyny:
- Adres w komendzie nie prowadzi do właściwej domeny lub pliku
wp-cron.php. - Narzędzie
wgetalbocurljest niedostępne, zablokowane przez hosting lub wymaga pełnej ścieżki. - Panel nie ma uprawnień do wykonania wskazanego programu albo konto przekracza limity zasobów.
- Zadanie uruchamia się z innym środowiskiem PHP niż strona, dlatego warto sprawdzić wersję PHP i logi wykonania.
- Hosting wymaga lokalnej ścieżki do pliku zamiast wywołania przez URL.
Przy długich zadaniach warto zapobiec równoległemu uruchomieniu kolejnej kopii. Jeśli dostawca hostingu udostępnia flock, można użyć blokady, na przykład:
flock -n /tmp/wordpress-cron.lock wget -q -O - https://twojadomena.pl/wp-cron.php >/dev/null 2>&1
Nie każdy hosting pozwala na taką składnię, dlatego przed użyciem sprawdź dostępne polecenia i dokumentację panelu. Gdy panel nie udostępnia zadań cron albo blokuje wywołania HTTP, konfigurację trzeba uzgodnić z administratorem serwera.
Po poprawnym wykonaniu obu etapów WordPress nadal korzysta z tych samych zaplanowanych zdarzeń, ale ich uruchamianie przejmuje zegar serwera. Ruch użytkowników nie decyduje już o tym, kiedy zadania zostaną rozpoczęte.