Нагрузка на сервер от wp-cron.php. Отключить или оптимизировать?

К нам периодически обращаются клиенты с различными вопросами. Достаточно часто вопросы связаны с оптимизацией сайтов или сервера. На днях к нам обратился клиент, у которого была очень высокая нагрузка. Как оказалось проблема была в том, что очень часто запускался wp-cron.php. Это было видно по логам


195.1.***.*** - - [12/Sep/2015:04:11:00 +0300] "POST /wp-cron.php?doing_wp_cron=1442193059.4414520263671875000000 HTTP/1.0" 499 0 "-" "WordPress/4.3; https://****.com" "-"
195.1.***.*** - - [12/Sep/2015:04:15:00 +0300] "POST /wp-cron.php?doing_wp_cron=1442209914.0411450862884521484375 HTTP/1.0" 499 0 "-" "WordPress/4.3; https://****.com" "-"
195.1.***.*** - - [12/Sep/2015:04:15:10 +0300] "POST /wp-cron.php?doing_wp_cron=1442209914.0411450862884521484375 HTTP/1.0" 499 0 "-" "WordPress/4.3; https://****.com" "-"
195.1.***.*** - - [12/Sep/2015:04:15:13 +0300] "POST /wp-cron.php?doing_wp_cron=1442209914.0411450862884521484375 HTTP/1.0" 499 0 "-" "WordPress/4.3; https://****.com" "-"

из лога видно, что сам WordPress шёлт POST запросы к wp-cron.php.

Что такое wp-cron?

WP-CRON это штатный планировщик задач WordPress, который позволяет выполнять запланированные операции.

За что отвечает wp-cron.php

wp-cron.php это скрипт, который выполняет ряд задач, а именно:

  • публикация отложенных постов;
  • проверка обновлений (WP, плагины и шаблоны);
  • рассылка уведомлений о новых комментариях;
  • оповещение о новых постах;

и так далее.

Задач у данного скрипта немало, следовательно он нужен. Однако столь частый запуск является ресурсоёмким удовольствием и может вызвать нехватку оперативной памяти на младших тарифах хостинга для wordpress.

Отключение wp-cron.php

Очевидным решением в такой ситуации для нас стал отключение автоматического запуска wp-cron.php самим WordPress. Делается это достаточно просто. Добавьте такой код в конфигурационный файла wp-config.php  (например после define (‘WPLANG’, ‘ru_RU’); )

define('DISABLE_WP_CRON', true);

Таким образом мы избавились от столь частого автоматического запуска wp-cron.php. Однако, как мы помним задачи он выполняет достаточно важные. Следовательно запуск его необходим. Поэтому необходимо добавить cron задачу на сервере следующего вида

curl "http://domen.com/wp-cron.php?doing_wp_cron"

Частоту запуска можно определить самостоятельно, в зависимости от потребностей. В нашем случае клиенту был установлен интервал запуска раз в 10 часов.

Этот сайт использует файлы cookie, систему Google Analytics для сбора статистики о посетителях сайта, а также для сбора данных, таких как ваш IP и геолокация. Подробнее о нашей политике обработки персональных данных. Продолжая использовать текущий веб-сайт, Вы автоматически соглашаетесь с использованием описанных технологий.