WP Cron - какво е това, как да премахнете doing_wp_cron

Какво е WP Cron

WP Cron е планировчик, вграден в ядрото на WordPress, който ви позволява да изпълнявате различни задачи стриктно според предварително определен график, например:

Предимството на WP Cron е, че е напълно независим от настройките на сървъра и ще работи на всяка платформа. Недостатъците ще бъдат по-малко, когато стигнем до оптимизирането на настройките, но засега няколко примера за това как да създадете и добавите свое собствено събитие към планировчика.

Как да добавите събитие към WP Cron Scheduler

Кодът по-долу може да бъде поставен във functions.php или да създадете MU плъгин

Пълен списък с магически времеви константи в WordPress:

  • MINUTE_IN_SECONDS — брой секунди в минута;
  • HOUR_IN_SECONDS — брой секунди в час;
  • DAY_IN_SECONDS — брой секунди в деня;
  • WEEK_IN_SECONDS — брой секунди в седмицата;
  • MONTH_IN_SECONDS — брой секунди в месеца;
  • YEAR_IN_SECONDS е броят секунди в годината.

Това беше абстрактен пример. Можете лесно да персонализирате схемата за себе си. А за отстраняване на грешки, за да видите дали кодът работи, препоръчвам да използвате плъгинаWP Crontrol (повече за това по-късно).

WP Crontrol – Плъгин за отстраняване на грешки в график за планирани събития на WordPress

WP Crontrol е много полезен плъгин, който ви позволява да:

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

cron

Списък на събитията в WPCrontrol

това

Добавяне на ново събитие към WP Crontrol

Силно препоръчвам да го използвате, всичко е ясно и удобно.

Изтеглете WP Crontrol от официалното хранилище на Wordress.org

И така, връщайки се към предишната тема, ако сте добавили кода от горния пример, тогава ново събитиеsheensay_new_event

това
трябва да се появи в списъка със събитияEvents http://example.com/wp-admin/tools.php?page=crontrol_admin_manage_page

Ако събитиетоsheensay_new_event не се появи, опитайте да заредите която и да е страница на сайта от интерфейса, например основната. Тогава кукатаwp ще се задейства и събитието ще бъде добавено към планировчика.

Недостатъци на WP Cron

Целият смисъл на вградения механизъм за планиране е, че всеки път, когато някой потребител посети сайт на WordPress, се осъществява достъп до файла wp-cron.php. Това от своя страна проверява графика при всяко повикване и ако времето за изпълнение на някое събитие в опашката е настъпило или вече е изтекло, тогава го стартира. От тук става ясно какви биха могли да бъдат недостатъците на този подход:

  • Ако сайтът има много трафик, тогава обажданията към WP Cron ще бъдат твърде чести, излишни, което на сайтове с голям трафик може да причини някои проблеми с производителността на сървъра;
  • Ако сайтът има малко посетители, тогава WP Cron може да закъснее много.

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

Как правилно да деактивирате WP Cron

в wp-config.php намираме реда define( 'WP_DEBUG', false); и под него напишете:

Как да замените WP Cron със сървърен планировчик на cron

Първо деактивирайтеWP Cron в wp-config.phpнапишете някъде в началото на файла, както в примера по-горе:

След това изпълняваме командата в SSH конзолата

Тук всяка минута с командата cd /var/www/example.com/public_html превключваме към директорията с файловете на сайта (към корена на сайта) и wp cron event run --due-now --allow-root правиphp заявка към wp-cron.php чрез WP CLI. Тази опция има свои собствени тънкости: тук php се изпълнява от конзолата и затова е полезна, да речем, ако портове 80 или 443 са затворени на сървъра иwget илиcurl са безсилни.

WP CLI работи в PHP-CLI режим, което означава, че няма времеви ограничения за изпълнение на php. Това означава:

  • Всички задачи са гарантирано изпълнени;
  • Ако някое от заданията, поради синтактични грешки или по друг начин, не може да завърши своята работа, това може да причини проблеми.

Ето защо, тук решете сами, след като претеглите плюсовете и минусите, дали да изберете WP CLI или не.

Или използвайте php

Тук всяка минута с командата cd /var/www/example.com/public_html превключваме към директорията с файловете на сайта (до корена на сайта) и php wp-cron.php прави заявка къмphp към wp-cron.php Тази опция с php е полезна, да речем, ако портове 80 или 443 са затворени на сървъра иwget илиcurl са безсилни. Или използвайте wget

Това правило осъществява достъп до http://example.com/wp-cron.php?doing_wp_cron cron файла на WordPress всяка минута с помощта наwget, като по този начин кара планираните WP Cron събития да се изпълняват редовно.

  • От предимствата - wget е инсталиран на почти всяка машина по подразбиране.
  • От минусите, разработката му отнема много време и следователно не поддържа правилно https и някои други опции, достъпни заcurl. Освен това могат да възникнат проблеми, ако заявките към сайта са блокирани отпристанища.
Или използвайте curl

Това правило ще изпраща заявки всяка минута чрезcurl до http://example.com/wp-cron.php?doing_wp_cron.

  • Curl е разширена версия на wget, много опции с възможност за промяна на протоколи, потребителски агент, принуден TLS, възможност за компресиране на отговора и много други.
  • Минуси - не винаги идва по подразбиране със сървърния софтуер и трябва да го инсталирате отделно. В Ubuntu и Debian обаче това е лесно:
  • Друг минус - случва се сървърът да не приема заявки (например защита от парсери)

Добавете една от горните команди в края на файла (заменете example.com с вашия домейн).

  1. Регистрираме една от горните команди;
  2. Изход Ctrl + X ;
  3. На изхода ще бъдете попитани дали да запазите промените. Запази Y ;
  4. Име на файл за запис - оставете без промяна - Enter;
  5. Ако видите подписа crontab: инсталиране на нов crontab, значи промените са запазени

  1. Включете режима за редактиране - Вмъкване;
  2. Добавяме правилата в края на файла (примерите бяха обсъдени по-горе);
  3. След като направите промени, изключете режима за редактиране - Esc;
  4. Запазване на промените - Shift + : (двоеточие), в появилото се поле въведете wq и запазете Enter ;
  5. Ако видите отговора crontab: инсталиране на нов crontab, значи промените са запазени и са влезли в сила.

Ако искате да проверите дали промените са приложени към графика на cron, използвайте командата crontab -l

Настройване на сървър cron за WordPress MultiSite MU

Ако имате многосайтова компилация на WordPress, тогава подходите по-горе няма да работят.

Най-добрият вариант е да отворите Crontab в SSH конзолата с командата crontab -e и да въведете:

Какво означава всичко това -сървърcron ще направи следното:

* * * * * Правим заявка всяка минута. cd /var/www/example.com/data/www/example.com; Отидете в горната директория /var/www/example.com/data/www/example.com – тук трябва да посочите абсолютния път до корена на WordPress сайта. /usr/local/bin/wp списък със сайтове --field=url --allow-root Вземете списъка със сайтове в мултисайтовата мрежа на WordPress. Предаваме резултата от командата wp site list на командата xargs, помощна програма, която взема входни редове и ги предава на следващата команда. xargs -n1 -I \% /usr/local/bin/wp --url=\% cron event run --due-now --allow-root Командата ще изпълни следната команда последователно за всеки сайт от списъка: wp --url=\% cron събитие run --due-now --allow-root. \% ще бъде заменен от URL адреса на мрежовия сайт на WP MU.

Ако трябва да проследите работата на тази команда за целите на отстраняване на грешки, можете да включите регистрационния файл, като добавите >> /root/wp-cron_log.txt 2>&1 , тогава резултатът от командата ще бъде записан във файла /root/wp-cron_log.txt (можете да посочите различен път и файл):

Остава да деактивирате WP Cron във файла wp-config.php в корена на сайта:

Силно препоръчвам горния вариант, той е по-надежден от този по-долу.

Друг вариант, ако опцията по-горе не пасва, е да създадете файл mu-cron.php и да го поставите в корена на сайта до wp-load.php. Кодът на файла mu-cron.php е по-долу:

Сега нека настроим cron на сървъра. Конзолна команда:

И там влизаме:

Или чрез IP на вашия сървър

Е, разбира се, не забравяйте да деактивирате родния WP Cron във файла wp-config.php в корена на сайта:

Грешки, свързани с WP Cron

Възникна проблем при повикване към системата WP-Cron на вашия сайт

Горната грешка означава, чеcurl не може да получи достъп до сайта на стандартни портове 80 или 443. Можете да разрешите този проблем, като активирате алтернативен начин за стартиране на WP Cron, като напишете в wp-config.php :

Премахнете doing_wp_cron от URL

По правило се включва, когато WP Cron не работи в стандартната версия. Трябва да се опитате да избегнете използването му:

Ако WP Cron не работи или дава грешка, можете напълно да деактивиратеWP Cron и да използвате сървър cron (подробностите бяха по-горе). Също така, няма да е излишно да настроите пренасочване с ?doing_wp_cron= към оригиналната версия на страницата:

Как да пренасоча ?doing_wp_cron= към NGINX Как да пренасоча ?doing_wp_cron= към .htaccess (Apache)

Деактивирах WP Cron, но POST /wp-cron.php?doins_wp_cron?parameters се появява отново в access.log

Случва се, изглежда, WP Cron да е деактивиран (всичко е направено според инструкциите по-горе), но в регистрационните файлове все още се появяват знаци, че идват стандартни заявки

Факт е, че тук може да се окаже, че сте регистрирали неправилно деактивирането на WP Cron, а именно реда define('DISABLE_WP_CRON', true); регистриран в самия край на файла wp-config.php. Не забравяйте да го преместите в define('WP_DEBUG', false); :

След това опитайте да изчистите всички планирани задачи (повече за това по-долу).

WP Cron се забавя много, появяват се грешки, какво да правя?

Първо инсталирайте плъгинаWP Crontrol (описан по-горе). След това отидете наИнструменти-Cron Events( http://example.com/wp-admin/tools.php?page=crontrol_admin_manage_page ):

cron
Нормално, ще видите нещо подобно:

това

Списък със събития в WP Crontrol

Ако страницата не се отвори или се отвори, но в таблицата й има много позиции, тогава си струва да ги изчистите. Най-лесният начин: презfunctions.php:

    Отворете functions.php и напишете точно в самото начало на файла под:

и запазете резултата;

  • Отворете всяка страница от сайта;
  • Върнете се към functions.php и премахнете реда update_option('cron', ''); , запазете резултата;
  • Отворете отновоИнструменти -Cron Events и вижте дали таблицата трябва да се върне към нормалното (да е празна или да има малко стойности).
  • Всичко, сега WP Cron трябва да работи добре. Но ви съветвам да го изключите и да настроите сървърен планировчик (инструкция по-горе), тогава сайтът ще работи като часовник.