Дизайн та розробка сайту

wp-cron.php и нагрузка на сайт, что делать?

wp-cron.php и нагрузка на сайт, что делать?

Доброго времени суток. 🙂

Сегодня будет скорее информативная статья, нежели инструкция об установке чего либо на сайт. Если конкретнее, то речь пойдет о файле wp-cron.php и все что с ним связано. Дело в том, что когда-то я так же как и многие не знал об этом звере ничего и в какой-то момент работы со своим сайтом, столкнулся с вопросом нагрузки на сервер.

wp-cron.php и нагрузка на сайт, что делать?

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

Выглядело в логах, это примерно так:

94.178.161.*** — — [18/Sep/2015:15:11:00 +0300] «POST /wp-cron.php?doing_wp_cron= и тд.
94.178.161.*** — — [18/Sep/2015:15:12:00 +0300] «POST /wp-cron.php?doing_wp_cron= и тд.
94.178.161.*** — — [18/Sep/2015:15:12:10 +0300] «POST /wp-cron.php?doing_wp_cron= и тд.
94.178.161.*** — — [18/Sep/2015:15:14:09 +0300] «POST /wp-cron.php?doing_wp_cron= и тд.

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

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

wp-cron.php - по своей сути является планировщиком задач в WordPress. На его плечи возложена ответственность за настройку планирования и выполнения определенных задач, которые зависят от времени. Можно выделить несколько основных задач:

  • Если вы запланировали публикацию записей не сразу, а на какое-то время, wp-cron сделает это.
  • Проверяет наличие обновлений для установленных тем и плагинов.
  • Занимается отправкой уведомлений.
  • Оповещает сервисы служб слежения за публикацией нового материала.
  • Запуск тех плагинов, что подобны Akismet которые модерируют комментарии и тд.

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

Но, если бы было все так гладко, не было этой статьи и многих подобных. Дело в том что некоторые задачи требуют затраты системных ресурсов сервера, создавая нагрузку и если такие нагрузки будут постоянными, то это грозит "падению" сайта, то есть хостинг просто отключит его на время.

Что делать если wp-cron.php создает нагрузку?

Лично я знаю два варианта, одним из которых пользуюсь и по сей день. первый вариант, требует некоторых знаний и небольших усилий. Придется править файлы WordPress и настраивать планировщик (cron) на стороне хостинга. Второй вариант - это установка плагина. Я не любитель установки кучи плагинов на свой сайт по всяким мелочам, потому данным способом не пользовался. Если, же вы чувствуете и знаете свои возможности или просто не хотите заморачиваться, то можете попросту найти и скачать какой-то плагин. Рекомендовать конкретный не буду, потому как с ними не работал.

Касательно ручной настройки, то нужно сделать 2 шага. Сначала в корневой папке сайта в файле конфигурации - wp-config.php и по сути в любое его место добавить нужную строку. Некоторые добавляют после строки:

define ('WPLANG', 'ru_RU'); 
или
define('WP_POST_REVISIONS', false);

В общим после какой-то из них добавляете

define('DISABLE_WP_CRON', true);

Перед правкой wp-config.php, сделайте его копию, чтобы в случаи, если что-то пойдет не так, была возможность вернуть все в исходную позицию.

После этого ваш wp-cron.php перестает постоянно работать. Но полное его отключение не очень хорошо, поэтому нужно настроить самим правильное планирование. Для этого нужно уже перейти в личный кабинет на хостинге и посмотреть не настроен ли планировщик (cron) там.

В моем случаи это было не сложно. В панели управления был планировщик и он был настроен на выполнение каждый час. С легкостью можно переключать на другой интервал. Меня это устроило и я оставил его без изменений.

Вам нужно будет найти в панели управления хостингом планировщик (cron) и запустить его. Чаще всего они примерно одинаковы. Там будет поле для команды и выбор времени периодичности запуска. Периодичность выставляйте такую, какую считаете нужной, если сайт имеет очень большую популярность посещения, то ставьте примерно на каждые 5 минут. Если сайт имеет посещение примерно +/-1000 посетителей, то хватит и раз в час. В поле с командой, нужно ввести эту саму команду. В моем случаи она была примерно такой

http://имясайта.com/wp-cron.php?doing_wp_cron

Бывает рекомендуют вводить такую команду:

wget http://имясайта.com/wp-cron.php > /dev/null 2>&1

Замените имясайта.com на настоящие имя своего сайта.

Если не можете найти в панели управления сайтом планировщик (cron), можете обратится в техподдержку хостинга и спросить у них, как лучше настроить. Если хостинг более-менее нормальный, то вам обязательно помогут.

Если Вы справились с задачей и хотите проверит правильно ли все сделали, то можете проверить результат. Запланируйте публикацию какой-то записи на нужное время. Например если вы запланировали запуск wp-cron.php каждые 5 минут, запланируйте запись через 10, то есть время должно быть немного больше, чтобы точно убедится. Если она опубликуется, значит вы сделали все правильно.

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

На этом все, спасибо за внимание. 🙂

Дизайн та розробка сайту

Back to top