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

wordpress logoWordPress — одна из самых популярных CMS для создания сайтов. Для размещения сайта на базе WordPress достаточно PHP-хостинга с поддержкой MySQL. Однако для полноценной работы сайта важно не только обеспечить доступность страниц, но и настроить автоматическое выполнение регулярных задач (проверку обновлений WordPress и плагинов, создание резервных копий, очистку временных данных, отправку электронных писем и синхронизацию информации с внешними сервисами) таким образом, чтобы это не создавало проблем посетителям.

В WordPress для этого предусмотрен собственный механизм планирования задач — WP-Cron. Он позволяет самому WordPress и установленным плагинам регистрировать задачи и запускать их в определённое время или через определённые интервалы.

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

Что такое WP-Cron в WordPress

WP-Cron — это встроенный в WordPress механизм планирования и запуска задач.

Его используют как сам WordPress, так и установленные плагины и темы. Например, через WP-Cron могут запускаться:

  • публикация запланированных записей;
  • проверка обновлений WordPress;
  • автоматическая очистка временных данных;
  • отправка электронных писем по расписанию;
  • резервное копирование;
  • синхронизация с API сторонних сервисов;
  • генерация отчётов;
  • обработка фоновых задач WooCommerce.

Название WP-Cron происходит от сервиса «cron» — системного планировщика задач. Однако технически это разные механизмы.

Как работает WP-Cron

Главная особенность WP-Cron заключается в том, что он не работает постоянно в фоновом режиме. Запуск WP-Cron происходит каждый раз, когда пользователь или любой бот открывает страницу сайта WordPress. Когда на WordPress заходит пользователь или бот, сам сайт проверяет, есть ли запланированные cron-задачи, время выполнения которых уже наступило. Если такая задача есть, WordPress пытается её запустить.

Именно эта модель отличает WP-Cron от системного cron.

Где WordPress хранит cron-задачи?

Информация о запланированных задачах хранится в базе данных WordPress, а именно в опции cron таблицы wp_options.

Во время работы WordPress проверяет эти данные и определяет, какие задачи уже должны быть выполнены.

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

Почему WP-Cron может запускаться с опозданием

Предположим, что вы запланировали публикацию статьи на 08:00.

Если в это время никто не открывает сайт, WordPress не обязательно выполнит задачу именно в 08:00.

Если первый посетитель зайдет в 11:30, именно тогда WordPress может обнаружить просроченную задачу и запустить её.

То есть WP-Cron гарантирует не точное время запуска, а лишь возможность выполнения задачи после наступления запланированного времени.

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

Почему WP-Cron может замедлять работу WordPress

Запуск WP-Cron не означает, что сайт обязательно будет работать медленно.

Проблемы возникают в зависимости от количества посетителей, количества запланированных задач, конфигурации сервера и установленных плагинов.

1. Дополнительные проверки при запросах

Когда WordPress обрабатывает запрос, он может проверять наличие cron-задач, которые необходимо выполнить. На небольшом сайте это, как правило, не имеет большого значения. Но на ресурсах с большим количеством запросов количество таких проверок также увеличивается.

Если одновременно запускаются ресурсоемкие cron-задачи, они могут создавать дополнительную нагрузку на:

  • PHP;
  • PHP-FPM;
  • MySQL/MariaDB;
  • CPU;
  • оперативную память;
  • дисковую подсистему.

2. Проблемы на сайтах с низкой посещаемостью

Удивительно, но WP-Cron может быть проблемой не только для крупных сайтов.

На сайте с низким трафиком cron-задачи могут просто не запускаться вовремя.

Например:

Публикация записи запланирована на 10:00, но в это время никто не посещает сайт, из-за чего задача не выполняется вовремя. Когда в 15:00 на сайт заходит поисковый бот или обычный пользователь, WordPress запускает wp-cron и публикует статью.

Для контентного сайта это может быть приемлемо. Для автоматизированных бизнес-процессов — уже нет.

3. WP-Cron и кэширование страниц

Современные WordPress-сайты часто используют кэширование страниц.

В такой конфигурации запрос пользователя может вообще не доходить до PHP и WordPress — сервер или CDN просто возвращает готовую HTML-страницу.

Из-за этого запуск WP-Cron по посещениям становится менее предсказуемым.

Особенно это актуально для сайтов, где большинство страниц выдается из кэша.

4. Тяжелые cron-задачи

Проблема может заключаться не в самом механизме WP-Cron, а в том, что именно запускается через него.

Например, плагин может выполнять:

  • импорт тысяч товаров;
  • синхронизацию каталога;
  • генерацию большого отчета;
  • массовую рассылку электронных писем;
  • резервное копирование;
  • очистку большого количества записей.

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

Сравнение WP-Cron и системного сервиса Cron

Главное отличие заключается в способе запуска.

Характеристика WP-Cron Системный Cron
Где работает Внутри WordPress На уровне сервера
Зависит от посещаемости ✅ ❌
Зависит от кэша страниц Не всегда ❌
Можно задать интервал ✅ ✅
Должно поддерживаться сервером ❌ ✅
Предсказуемость запуска Низкая Высокая
Подходит для крупных сайтов Не всегда ✅
Системный планировщик задач (cron) работает независимо от того, есть ли на сайте посетители.

Например, сервер может запускать процесс, который будет проверять наличие запланированных задач каждые 5 или 15 минут и запускать их, если такие задачи будут.

Как отключить WP-Cron в WordPress

Если вы решили использовать системный планировщик задач, сначала нужно отключить автоматический запуск WP-Cron.

Для этого откройте файл wp-config.php и добавьте следующую строку:

define("DISABLE_WP_CRON", true);

в любом месте между приведёнными ниже строками:

<?php

...
/* That's all, stop editing! Happy publishing. */
Важно: Отключив wp-cron, ваш сайт WordPress перестанет автоматически запускать запланированные задачи с помощью внутренних механизмов. Поэтому после этого следует настроить выполнение cron-задач с помощью системного планировщика задач.

Как настроить системные запланированные задачи для WordPress

Современный хостинг позволяет настроить запуск задач по расписанию через панель управления. Если на вашем хостинге используется панель управления cPanel или DirectAdmin, то вам остаётся только войти в панель управления хостингом и настроить задания:

  • Выбрать расписание, по которому будут запускаться задания.
  • Указать команду, которая должна запускаться.

Для WordPress команда должна выглядеть следующим образом:

wget -q -O - https://DOMAIN.COM/wp-cron.php?doing_wp_cron >/dev/null 2>&1

(не забудьте заменить DOMAIN.COM на доменное имя вашего сайта).

Как часто запускать WordPress Cron

Универсального значения нет. Для обычного корпоративного сайта или блога можно начать с запуска задания каждые 15 минут.

Для активного магазина WooCommerce может потребоваться настроить запуск задачи каждые 5 минут.

А для сайтов с критическими фоновыми процессами интервал может быть ещё меньше.

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

Как проверить, работает ли WordPress Cron

После настройки системного cron важно проверить результат.

Один из самых удобных инструментов — плагин WP Crontrol.

С его помощью можно увидеть:

  • список запланированных событий;
  • время следующего запуска;
  • время предыдущего запуска;
  • частоту повторения;
  • выполняемый коллбэк (callback);
  • возможные проблемы с cron-задачами.

После перехода на системный планировщик задач рекомендуется несколько дней проверять работу сайта.

Особенно стоит убедиться, что:

  • запланированные записи публикуются;
  • резервное копирование работает;
  • отправляются электронные письма;
  • WooCommerce выполняет свои фоновые задачи;
  • сторонние интеграции синхронизируются;
  • cron-события не накапливаются.

Кому особенно стоит заменить WP-Cron

Интернет-магазинам на WooCommerce

WooCommerce может иметь большое количество фоновых задач.

Для магазинов с высокой активностью контролируемый запуск cron-задач особенно важен.

Сайтам с большим трафиком

Если сайт получает тысячи запросов в день, имеет смысл устранить зависимость cron от обычных посещений.

Сайтам с агрессивным кэшированием

Если большинство страниц выдается из кэша страниц или CDN, системный cron позволяет запускать запланированные задачи независимо от кэша.

WordPress Multisite

На Multisite количество фоновых задач может увеличиваться вместе с количеством сайтов.

В крупных установках централизованный контроль cron становится особенно полезным.

Нужно ли отключать WP-Cron на каждом WordPress-сайте?

Краткий ответ: Нет.

Для небольшого сайта с небольшим количеством плагинов стандартный WP-Cron часто работает вполне нормально.

Не стоит менять конфигурацию только потому, что «WP-Cron медленный».

Лучше оценить:

  • количество cron-задач;
  • их продолжительность;
  • нагрузка на сервер;
  • количество посетителей;
  • использование кэширования;
  • требования к точности выполнения задач.

Если у сервера достаточно ресурсов и проблем с wp-cron нет, замена может не дать заметного результата.

WP-Cron — полезный и простой механизм, но он не является полноценной заменой системному cron.

Его главный недостаток заключается в том, что выполнение задач привязано к активности сайта.

Для небольших сайтов это часто не создает проблем. Но для крупных WordPress-проектов, WooCommerce-магазинов, сайтов с кэшированием страниц и сайтов на базе WordPress Multisite системный планировщик задач может быть гораздо более надёжным решением.

Таким сайтам мы рекомендуем использовать именно системный cron.

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

Прокрутить вверх