Изключване на WordPress cron и заместването му с cron job (планирана задача)

Какво е WordPress cron?

WordPress използва своя собствена система за изпълнение на планирани задачи, като проверка за актуализации, прилагане на автоматични актуализации, планирано публикуване на статии и други. Името е взаимствано от Unix програмата cron, която има същата функция - изпълнение на задачи на определен интервал или точно зададено време. За разлика от Unix cron програмата, която работи през цялото време на сървъра, WordPress cron системата се изпълнява чрез wp-cron.php файла, който се зарежда при посещение на страница от WordPress сайта.

Какви са някои от предимствата и недостатъците на WordPress cron?

Поведението по подразбиране, разчитащо на посетители да достъпят страница от WordPress сайта Ви, идва с някои предимства и недостатъци. Основното предимство е, че WordPress cron ще проверява редовно за задачи, чакащи изпълнение, ако сайтът Ви има много посетители. Това е изключително важно за сайтове с много посещения, които разчитат на получаването на актуални данни чрез разширения през WordPress cron, тъй като представените данни на посетителите на сайта ще бъдат актуални.

В същото време това може да има и обратния ефект - Вашият WordPress cron може да не се изпълни за продължителен период, ако сайтът Ви няма посетители през това време. WordPress cron ще се стартира, чак след като посетител пристигне на Вашия сайт. В зависимост от времето за изпълнение на всички чакащи задачи в WordPress cron, посетителят на сайта Ви може да види остарели/грешни данни. Също така е важно да се спомене, че може няколко отделни инстанции на WordPress cron да се изпълняват едновременно, ако например изпълнението им отнема прекалено много време. Това може допълнително да забави изпълнението на планираните задачи.

Друг голям недостатък на механизма за изпълнение на планирани задачи в WordPress е, че той може да доведе до увеличено използване на системни ресурси, когато има много посетители на сайта (например, ако ботове обхождат сайта Ви). Още един недостатък е, че фоновото изпълнение на WordPress cron може значително да увеличи времето за зареждане на страниците от сайта Ви и по този начин да повлияе негативно на усещането в посетителите му.

Как да се намали интервала на изпълнение на WordPress cron?

Можете да добавите следния ред към конфигурационния файл на WordPress (wp-config.php) чрез раздел "Файлове" на хостинг Контролния панел, за да се опитате да премахнете част от недостатъците на WordPress cron системата:

define( 'WP_CRON_LOCK_TIMEOUT', 3600 );
Този ред настройва минималния интервал на изпълнение на WordPress cron на един час, което обикновено е достатъчно за повечето сайтове и планирани задачи в WordPress, като в същото време помага значително за намаляването на използваните системни ресурси и отрицателните ефекти върху времето за зареждане на страниците на Вашия сайт.

По подразбиране този ред е добавен в конфигурационния файл на всички WordPress приложения, които са предварително инсталирани на акаунта или са инсталирани през WordPress мениджъра в хостинг Контролния панел.

Как да се замени cron имплементацията на WordPress с cron job (планирана задача)?

За да замените cron имплементацията на WordPress с нормална планирана задача (cron job) на нашите сървъри, трябва да:

  1. Спрете изпълнението на WordPress cron при посещение на страница от сайта Ви. Можете да направите това, добавяйки следния ред в конфигурационния файл на WordPress (wp-config.php):

    define('DISABLE_WP_CRON', true);
    За целта можете да използвате раздел "Файлове" на хостинг Контролния панел.

  2. Създадете скрипт в директорията на Вашата WordPress инсталация (напр. /www/www/cron.sh, ако WordPress използва Вашия основен домейн), който да изпълнява всички планирани задачи в WordPress cron. Тук също можете да използвате раздел "Файлове" на хостинг Контролния панел. Има много начини за изпълнението на WordPress cron, затова ще дадем само два примера - чрез изпращане на GET заявка до wp-cron.php файла и чрез използването на "WP-CLI".

    Добавете следния блок с код в създадения скрипт, за да се изпълнява WordPress cron чрез изпращане на GET заявка до файла wp-cron.php, което е равносилно на посещението му на сайта Ви:

    #!/bin/bash
    GET "http://YOUR_DOMAIN.com/wp-cron.php" > /dev/null

    Трябва да замените YOUR_DOMAIN.com с точното име на Вашия домейн/поддомейн, с който работи Вашата WordPress инсталация.

    Ако искате скриптът да изпълнява cron системата на WordPress чрез WP-CLI, добавете следния блок с код в него:

    #!/bin/bash
    wp cron event run --due-now > /dev/null

    Ако скриптът за изпълнение на WordPress cron чрез WP-CLI се намира извън директорията на Вашата WordPress инсталация, трябва изрично да укажете WordPress директорията в WP-CLI командата чрез опцията "path":

    #!/bin/bash
    wp cron event run --due-now --path /home/example/www/www > /dev/null

    В горния пример WP-CLI ще изпълни всички задачи, които са отбелязани за изпълнение в WordPress cron системата, в хостинг акаунт с потребителско име "example" за WordPress инсталацията на главния домейн (в директорията ~/www/www/).

  3. Отворите раздел "Cron Jobs" на хостинг Контролния панел и да създадете cron job, който да изпълнява гореописания скрипт веднъж на час или по-често според Вашите нужди и наличните интервали за изпълнение на планирани задачи за Вашия хостинг план:

    Планирано изпълнение на WordPress cron

    Може да видите съобщение за планираната задача, показващо че липсват права за изпълнение на скрипта. Използвайте линка "Натиснете тук" в съобщението, за да добавите необходимите права:

    Добавяне на права

  4. Планираните задачи в WordPress вече ще се изпълняват правилно според зададения интервал без да зависят от посещението на страници от сайта Ви и без да увеличават времето за тяхното зареждане, когато посетители наистина използват Вашия сайт.