К нам периодически обращаются клиенты с различными вопросами. Достаточно часто вопросы связаны с оптимизацией сайтов или сервера. На днях к нам обратился клиент, у которого была очень высокая нагрузка. Как оказалось проблема была в том, что очень часто запускался 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 часов.