Статьи

Взгляд на WP-Cron: введение в планирование задач в WordPress

Сегодня мы рассмотрим функции WP-Cron, один из наименее известных приемов, которые вы можете использовать для развлечения! Основная цель заключается в настройке планирования или других чувствительных ко времени задач. Мы рассмотрим некоторые приемы его использования, а также выявим некоторые потенциальные проблемы с ним и способы их устранения.

WordPress является мощным программным обеспечением. Однако его простота часто может создать неправильное впечатление у пользователей, не имеющих технических знаний, о его внутренней работе. Это, возможно, послужило интересам WordPress, так как что-то, что кажется простым и легким в использовании, обычно принимается массами. Тем не менее, важно помнить, что за кулисами находится мощное программное обеспечение, способное делать гораздо больше, чем просто вести блог.

Одной из функций WordPress, о которой написано меньше, должен быть WP-Cron ( см. Страницу кодекса на WP-Cron здесь ). Теперь те из вас, кто имел дело с общим Cron на сервере Linux, знают всю мощь этой функции.

Cron — это команда UNIX для планирования заданий, которые будут выполнены в будущем. Крон обычно используется для планирования задания, которое выполняется периодически. Например, вы можете использовать функцию cron для отправки уведомления каждое утро. Это также процесс- демон , то есть он работает непрерывно, ожидая определенных событий.


Поскольку WordPress установлен на очень многих различных установках, чтобы все работало правильно, разработчики WordPress внедрили псевдокрон, который включает функции WP-Cron, которые помогают запускать задания по планированию, такие как:

  • Проверка обновлений тем и плагинов
  • Опубликовать запланированные сообщения
  • Отправка пингбэков
  • и более!

В отличие от обычных заданий cron, которые выполняются в определенное время в зависимости от настроек сервера, функция WP-Cron запускается каждый раз, когда кто-то посещает веб-сайт на платформе WordPress. Это делает сайт WordPress корректно работающим на различных типах настроек сервера, поскольку устраняет множество специфических для сервера требований. При каждой загрузке страницы WordPress проверяет необходимость запуска WP-Cron. Если есть необходимость, он пытается отправить запрос через HTTP в файл wp-cron.php .

Причина вызова wp-cron.php заключается в том, что некоторые задания могут занимать больше времени, и пользователь, запрашивающий страницу WordPress, не может быть заставлен ждать. Вызов wp-cron.php помогает поддерживать функцию WP-Cron как отдельный процесс в фоновом режиме, не задерживая время загрузки страницы для пользователя. Как только функция WP-Cron запускается, она продолжает работать до тех пор, пока не будут выполнены все необходимые задания или пока не достигнет времени выполнения, установленного в конфигурации сервера.

В зависимости от настроек вашего веб-хостинга, WP-Cron может не завершить свою работу или вообще не работать. Сайты с высоким трафиком сталкиваются с другим набором проблем, таких как множественные процессы WP-Cron, работающие в циклах В основном люди обвиняют WordPress в этом, но это не обязательно проблема WordPress. Каждая ситуация индивидуальна, и на ее основе мы можем настроить WordPress так, чтобы он работал наилучшим образом. Ниже вы найдете некоторые общие проблемы, с которыми сталкиваются люди, и способы их устранения.


Если вы являетесь администратором сервера или управляете своим собственным сервером с помощью брандмауэра, возможно, вы получили электронные письма от брандмауэра о том, что файл «wp-cron.php» работает в течение длительного периода времени. Это происходит, когда время выполнения скрипта, установленное на вашем сервере, превышает 60 секунд. Поскольку процесс не завершен, а новые процессы запущены, на сервере запускается несколько экземпляров процесса WP-Cron.

Этого не происходит на веб-сайте с низким трафиком, но если ваш веб-сайт на WordPress имеет одновременных пользователей в любой момент времени, а максимальное время выполнения сценария установлено высоким, то будет много экземпляров этой функции WP-Cron. До недавней версии WordPress всегда возникала проблема, когда несколько процессов cron зацикливались на одних и тех же событиях.

ПРИМЕЧАНИЕ : WordPress 3.3 дает нам еще лучшую блокировку cron. Эта статья была написана как раз в тот момент, когда был выпущен WordPress 3.3, в котором улучшена блокировка cron и предотвращено зацикливание нескольких процессов WP-Cron на одних и тех же событиях.

Еще одна широко распространенная проблема с некоторыми хостинг-провайдерами и некоторыми сайтами с очень низким трафиком — запланированные публикации, которые не публикуются. Поскольку функция WP-Cron выполняется только при наличии запроса страницы, если нет запросов, запланированные задания не выполняются.

Примечание: с WordPress проблем нет. Также, начиная с версии 3.x, об этом сообщалось гораздо меньше. Однако есть много плагинов для решения этой проблемы.

Опять же, это проблема с настройкой сервера. Из-за неправильных настроек блоки межсетевого экрана, которые не позволяют сценариям вызывать себя, поэтому функция WP-Cron не работает.


Чтобы избежать нескольких экземпляров WP-Cron, запущенных на вашем сервере для одного веб-сайта, я попытался использовать стандартный способ задания заданий cron на сервере Linux (Apache с cPanel в качестве панели управления). Преимущество этого метода:

  • Больше контроля над тем, когда работает функция WP-Cron.
  • Избегайте нескольких петель.
  • Если у вас есть сервер с большим количеством сайтов WordPress, это может снизить нагрузку на сервер.

Прежде чем начать, убедитесь, что ваш веб-хост позволяет вам настроить задания cron для Linux по умолчанию. Способ настройки будет отличаться в зависимости от панели управления, предлагаемой вашим хостом, но в этой статье я предоставлю руководство по настройке задания cron с помощью панели управления cPanel, которая в настоящее время распространена на серверах Linux.

Шаги, которые я следовал, были:

  1. Отключить внутренний WP-Cron для выполнения при загрузке страницы.
  2. Настройте функцию cron, которая делает запрос get в файл wp-cron.php через равные промежутки времени в зависимости от ваших предпочтений.

Да, это так просто. Всего два шага, чтобы все прошло гладко.

ПРИМЕЧАНИЕ. Прежде чем следовать этому методу, обратите внимание, что отключение внутреннего WP-Cron может также привести к некорректной работе веб-сайта в зависимости от настроек или используемых плагинов.

Откройте файл wp-config.php в NotePad или редакторе по вашему выбору и добавьте две нижние строки вверху.

1
2
//Disable internal Wp-Cron function
define(‘DISABLE_WP_CRON’, true);

Это теперь остановит выполнение внутренней функции WP-Cron и не вызовет файл wp-cron.php.

Если вам разрешено настраивать задания cron, вам нужно будет настроить cron, как показано ниже:

wget http://www.server.com/wp-cron.php?doing_wp_cron=1 > /dev/null 2>&1


Обычно ссылка — http://yourwebsite.com/cpanel или http://yourwebsite.com:2082. Как только вы введете свой идентификатор пользователя и пароль и войдите в панель управления, прокрутите вниз до «Расширенного раздела».

Нажмите на значок «Cron Jobs» в расширенном разделе.

Страница входа в WordPress
Страница входа в WordPress

На новой странице вы найдете раздел «Добавить новую работу Cron», как показано на рисунке выше. В раскрывающемся поле «Общие настройки» выберите «Каждые 5 минут …». После того, как вы выберете это, остальные поля будут автоматически заполнены необходимой информацией. На следующем шаге я объясню свое намерение установить 5-минутный интервал для запуска сценария.

В поле команды добавьте следующую строку. Не забудьте добавить правильный адрес сайта.

wget http://www.yourwebsite.com/wp-cron.php?doing_wp_cron=1 > /dev/null 2>&1

Наконец, нажмите кнопку «Добавить новое задание Cron».

С этого момента сервер будет отправлять запрос на файл wp-cron.php каждые 5 минут. Теперь причина, по которой я установил это как 5 минут, состоит в том, что я в основном устанавливаю время выполнения сценария на 4 минуты вместо 60 секунд. Это сделано для того, чтобы можно было загружать большие файлы изображений, процессы резервного копирования и т. Д. Однако вы также можете изменить настройки и выбрать другие параметры для запуска cron каждую 1 минуту.

ПРИМЕЧАНИЕ. Это хорошо работает для обычных веб-сайтов WordPress. Для тех, кто использует сеть WordPress, могут потребоваться дополнительные действия, поэтому, пожалуйста, не используйте описанные выше шаги, если вы используете многопользовательскую версию WordPress.


Если у вас возникли проблемы или у вас есть другие идеи, пожалуйста, не стесняйтесь поделиться своими комментариями ниже!