Cron (harmonogram zadań) – jak ustawić przez SSH

Cron odpowiada za cykliczne uruchamiania określonych zadań, np. sprawdzanie aktualizacji, publikacja zaplanowanych wpisów czy automatyczne tworzenie kopii zapasowych. Cron w systemach opartych o Unix to odpowiednik harmonogramu zadań z systemu Windows. W WordPressie taką funkcję pełni WP-Cron.

Jedną z głównych różnic jest to, że mechanizm WP-Cron uruchamia się wraz z każdym wejściem na stronę. Wtedy też sprawdza czy ma do uruchomienia jakieś zadania i wykonuje je. Tak działa standardowe ustawienie. Niestety nie jest ono optymalne ponieważ sprawdzanie listy zadań podczas każdego wejścia na stronę często jest bezcelowe. Dodatkowo, w przypadku dużego ruchu, takie działanie ma znaczący wpływ na ogólną wydajność i może odpowiadać za opóźnienia w ładowaniu się strony.

Istnieje jednak rozwiązanie tego problemu w postaci użycia crona systemowego do uruchamiania WP-Crona. Z tego poradnika dowiesz się jak to wykonać.

Cron systemowy

Zanim zabierzemy się do konfiguracji WordPressa spójrzmy na cron systemowy. Żeby móc dodawać do niego zadania musimy użyć SSH oraz polecenia crontab.
crontab -l -> pokaże nam aktualne zadania,
crontab -e -> uruchomi edytor, w którym możemy usuwać, modyfikować i dodawać zadania.

Najpierw jednak musimy przygotować polecenie w odpowiednim formacie. Najwygodniej zrobić to przy pomocy https://crontab.guru/. Załóżmy, że chcemy dodać wywoływanie skryptu http://mojadomena.pl/powiadomienia.php w co drugą pełną godzinę w poniedziałki. 

Konfiguracja wyglądać będzie następująco:

0 */2 * * 1 curl -s http://mojadomena.pl/powiadomienia.php >/dev/null 2>&1

>/dev/null 2>&1 powoduje przekierowanie ewentualnych błędów w “nicość”. Cron systemowy wysyła maila w przypadku wystąpienia błędu podczas wykonywania. W naszym przypadku nie chcemy dostawać takich maili.

Jeśli jednak chciałbyś je otrzymywać to na samej górze w edytorze crontaba należy dodać:

MAILTO=skrzynka@mojadomena.pl

oraz usunąć fragment >/dev/null 2>&1.

Pamiętaj też, że edycja crontaba otwiera się w domyślnym na serwerze edytorze tekstu. Jeśli chcesz użyć swojego to ustaw zmienną środowiskową EDITOR. Możesz to zrobić np. tak:

EDITOR=nano crontab -e (wszystko w jednej linii)

Teraz możemy przejść do WordPressa.

WP-Cron + cron systemowy

Najpierw musimy wyłączyć domyślny mechanizm WP-Cron. Do pliku wp-config.php dodajemy następujący kod:

define('DISABLE_WP_CRON', true)

Następnie ustawiamy cron systemowy, aby co określony przedział czasu wywoływał naszego WP-Crona (np. co 30 minut):

*/30 * * * * curl -s https://mojastronaXYZ.pl/wp-cron.php >/dev/null 2>&1

Voilà! Zrobione 🙂

Cron w WordPressie

Chcesz dowiedzieć się więcej o tym jak tworzyć i przeglądać zadania w WordPressie? Zapoznaj się z naszym materiałem na blogu.

Dowiedz się więcej – Zadania CRON w WordPressie.