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