Как отключить WordPress Cron и подключить системный cron без лишней нагрузки

Если на сайте периодически всплывают задержки в админке, а в логах видно частые обращения к wp-cron.php, проблема часто не в «медленном хостинге», а в том, как WordPress запускает фоновые задачи. По умолчанию cron в WordPress не является настоящим системным планировщиком: он срабатывает на обычных HTTP-запросах. На небольшом сайте это незаметно, но на посещаемом проекте или на сайте с тяжёлыми плагинами такая схема может создавать лишнюю нагрузку и запускать задачи не в тот момент, когда это удобно серверу.

Когда WordPress Cron становится проблемой

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

Как понять, что дело именно в cron

Проверять стоит не по ощущениям, а по симптомам:

  • отложенные записи публикуются с опозданием;
  • в панели задач плагинов видно, что события «застревают»;
  • в логах веб-сервера много запросов к /wp-cron.php?doing_wp_cron=...;
  • на слабом хостинге растёт время ответа в моменты фоновых задач;
  • после очистки кэша или массовых изменений в админке сайт кратковременно тормозит.

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

Что именно меняем: сравнение вариантов

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

Вариант Когда подходит Минус
Оставить WP-Cron как есть Небольшой сайт, редкие задачи, нет доступа к серверу Зависит от трафика, возможны задержки
Отключить WP-Cron и запускать через системный cron Нужна стабильность и предсказуемость Требуется доступ к cron на сервере
Использовать внешний cron-сервис Нет доступа к серверному cron, но можно дергать URL по расписанию Нужно следить за доступностью внешнего сервиса

Для большинства сайтов на WordPress лучше второй вариант: отключить внутренний запуск и повесить вызов на системный cron. Это не ускоряет сайт магически, но убирает случайные срабатывания на фронтенде и делает выполнение задач более предсказуемым.

Пошаговое решение: отключаем WP-Cron и включаем системный cron

Шаг 1. Отключите встроенный запуск cron

Откройте wp-config.php и добавьте строку выше комментария /* That's all, stop editing! */:

define( 'DISABLE_WP_CRON', true );

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

Шаг 2. Создайте системную задачу на сервере

Если у вас есть SSH и обычный Linux-cron, добавьте задачу, которая будет вызывать wp-cron.php по расписанию. Часто достаточно интервала раз в 5 минут, но на сайтах с интенсивной фоновой активностью интервал подбирают по факту нагрузки.

*/5 * * * * curl -s https://example.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1

Если на сервере установлен wget, можно использовать его:

*/5 * * * * wget -q -O - https://example.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1

Важно: подставьте реальный домен сайта. Если сайт работает по HTTPS с корректным сертификатом, используйте именно HTTPS, а не HTTP.

Шаг 3. Проверьте, не блокирует ли хостинг запросы

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

  • открывается ли /wp-cron.php в браузере без редиректов и ошибок;
  • не закрыт ли доступ к файлу правилами безопасности;
  • не требует ли сайт авторизации, нестандартного домена или защиты по IP;
  • не ломает ли запрос WAF или модуль защиты от ботов.

Шаг 4. Если нужен более надёжный запуск, используйте PHP CLI

На части серверов удобнее запускать cron не через HTTP, а напрямую через PHP CLI. Тогда не участвует веб-сервер, и задача меньше зависит от сетевого стека.

*/5 * * * * /usr/bin/php -q /var/www/example.com/public_html/wp-cron.php > /dev/null 2>&1

Путь к PHP и к файлу сайта нужно брать из конфигурации вашего хостинга. Не копируйте команду вслепую: на разных серверах путь к бинарнику PHP отличается.

Как проверить, что решение сработало

Проверка нужна не только после настройки, но и через несколько часов работы. Иначе легко пропустить ситуацию, когда cron формально включён, но задачи всё равно не исполняются.

  • Откройте wp-admin/tools.php?page=site-health и посмотрите, нет ли предупреждений о cron.
  • Проверьте публикацию отложенной записи: она должна выйти в назначенное время или с минимальным отклонением.
  • Посмотрите логи веб-сервера: запросов к wp-cron.php от обычных посетителей должно стать меньше.
  • Если используете плагины с собственными очередями задач, проверьте их статус после нескольких циклов cron.

Для более точной диагностики можно временно добавить небольшой лог в отдельный mu-plugin или в functions.php темы, чтобы увидеть, вызывается ли cron вообще. Но не оставляйте такой код на постоянной основе в продакшене.

<?php
add_action( 'init', function () {
    if ( defined( 'DOING_CRON' ) && DOING_CRON ) {
        error_log( 'WordPress cron is running: ' . gmdate( 'c' ) );
    }
} );

Этот пример нужен только для проверки. Если логирование включено постоянно, следите за размером лог-файла и не пишите туда лишнее.

Частые ошибки и как их исправить

Отключили WP-Cron, но системный cron не добавили

Это самая неприятная ошибка: сайт перестаёт выполнять фоновые задачи вообще. Отложенные публикации зависают, письма не уходят, очистка кэша не происходит. Если уже добавили DISABLE_WP_CRON, сразу же проверьте наличие внешней задачи на сервере.

Ставят слишком редкий интервал

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

Используют неправильный путь к PHP

Команда в cron может не выполняться просто потому, что /usr/bin/php на сервере отсутствует. Проверяйте путь через панель хостинга или по SSH командой which php. Если доступа к SSH нет, ищите документацию хостинга.

Запускают cron через URL, который закрыт защитой

Если на сайте включены жёсткие правила безопасности, basic auth или ограничение по IP, запрос к wp-cron.php может получать 401/403. В таком случае либо настраивайте исключение, либо используйте запуск через PHP CLI.

Что учесть по безопасности и производительности

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

Если сайт большой, полезно дополнительно посмотреть, какие плагины создают больше всего cron-событий. Иногда проблема не в WordPress, а в одном плагине, который планирует слишком много повторяющихся задач. Тогда имеет смысл:

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

Если вы регулярно чистите сайт от технического мусора, дубликатов и лишних скриптов, полезно держать под рукой инструменты вроде Clearfy Pro. Но сам cron он не заменяет: задача всё равно остаётся серверной.

Когда лучше не отключать WP-Cron

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

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

Практический критерий простой: если сайт должен выполнять задачи предсказуемо, а не «когда кто-то зашёл», системный cron почти всегда удобнее. Если же доступов к серверу нет, лучше не усложнять схему без необходимости и ограничиться мониторингом расписания в админке и логах.

Как отключить WordPress Cron и подключить системный cron без лишней нагрузки
16.09.2026
Как отключить открытые XML-feeds в WordPress и не сломать индексацию
03.09.2026
Как закрыть от индексации страницы автора в WordPress без потери полезного трафика
13.09.2026
Как отключить открытые XML-RPC pingbacks в WordPress без поломки приложений
06.09.2026
Как отключить emoji в WordPress и убрать лишние скрипты из head
09.09.2026

Заметки по WP: подробные описания устаноки, гайды по настройке, разработке плагинов и тем.