Cron в WordPress: почему не срабатывает и как чинить
Запланированные публикации выходят с опозданием, резервные копии не создаются, а уведомления не приходят — всё это следствия сломанного WP-Cron. Разбираем, почему встроенный планировщик WordPress подводит и как заменить его настоящим.

Статья должна была опубликоваться в восемь утра — вышла в полдень. Плагин бэкапов молчит уже неделю. Письма с уведомлениями о комментариях приходят пачками раз в сутки. Причина одна: WP-Cron, встроенный планировщик WordPress, работает не как настоящий cron, а через посетителей сайта. Нет трафика — нет выполнения задач.
Почему WP-Cron не работает как настоящий планировщик
WordPress не использует системный планировщик сервера. Вместо этого при каждой загрузке страницы сайта проверяется файл wp-cron.php: если наступило время для какой-то задачи — она выполняется прямо во время этого запроса. На сайте с низким трафиком задача может ждать часами, пока кто-то не зайдёт. На сайте с агрессивным кешированием wp-cron.php может вообще не вызываться.
Три ситуации, когда WP-Cron гарантированно подводит:
- трафик меньше десяти уникальных посетителей в час — задачи выполняются с задержкой от получаса до суток;
- включено полностраничное кеширование (Cloudflare, плагины типа WP Super Cache или LiteSpeed Cache), и запросы не доходят до PHP;
- хостинг блокирует параллельные запросы к
wp-cron.phpкак попытку DDoS — встречается на дешёвых shared-тарифах.
Как проверить, работает ли WP-Cron
Зайдите в консоль браузера (F12 → вкладка Network) и откройте любую страницу сайта. В списке запросов найдите wp-cron.php. Если запрос есть и вернул код 200 — WP-Cron вызывается. Если запроса нет или он завершился с ошибкой 403/500 — система сломана.
Второй способ — через WP-CLI на сервере:
wp cron event list
Команда покажет очередь задач. Если задачи накапливаются и не исчезают после обновления страницы — WP-Cron не выполняет их.
Три подхода к решению
Подход 1: отключить WP-Cron и настроить системный cron
Самое надёжное решение — вывести выполнение задач за пределы запросов пользователей. Открываете wp-config.php, добавляете перед строкой /* That's all, stop editing! */:
define('DISABLE_WP_CRON', true);
Теперь WP-Cron не будет вызываться при загрузке страниц. Задачи нужно запускать вручную — через настоящий cron на сервере. В панели хостинга (cPanel, ISPmanager, Plesk) найдите раздел «Планировщик заданий» или «Cron» и добавьте задачу:
*/5 * * * * wget -q -O - https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
Замените example.com на адрес вашего сайта. Задача будет запускаться каждые пять минут независимо от посетителей. Если на сервере нет wget, используйте curl:
*/5 * * * * curl -s https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
Цена подхода: нужен доступ к панели хостинга или SSH. Если хостинг не даёт настроить cron — подход не применим.
Подход 2: внешний планировщик через сервис
Если доступа к cron нет, используйте внешний сервис — например, cron-job.org или EasyCron. Регистрируетесь, создаёте задание с URL https://example.com/wp-cron.php?doing_wp_cron и интервалом 5–10 минут. Сервис будет стучать по этому адресу с заданной частотой.
В wp-config.php добавляете DISABLE_WP_CRON, как в первом подходе. Без этого задачи будут дублироваться: и через внешний сервис, и через посетителей.
Цена подхода: зависимость от стороннего сервиса. Если он недоступен или закроется — задачи перестанут выполняться. Бесплатные тарифы часто ограничены десятью заданиями.
Подход 3: оставить WP-Cron, но исключить из кеша
Если трафик на сайте есть, но задачи не выполняются из-за кеширования — настройте исключение для wp-cron.php. В Cloudflare это правило Page Rule с опцией «Cache Level: Bypass». В плагинах кеширования WordPress ищите настройку «Never cache URIs» или «Exclude» и добавьте туда /wp-cron.php.
Подход не решает проблему низкого трафика, только проблему кеша. Если посетителей мало — задачи всё равно будут задерживаться.
| Подход | Надёжность | Требования | Когда применять |
|---|---|---|---|
| Системный cron | Высокая | Доступ к панели хостинга или SSH | Всегда, если есть доступ |
| Внешний сервис | Средняя | Только интернет | Когда нет доступа к cron |
| Исключение из кеша | Низкая | Настройка плагина или CDN | Только при хорошем трафике |
WP-Cron — не планировщик в строгом смысле. Это очередь задач, которая проверяется при каждом запросе к сайту. Если запросов нет — очередь не обрабатывается. Настоящий cron запускает задачи независимо от посетителей — поэтому он надёжнее для любых критичных операций.
Когда что выбирать
Если у вас VPS, выделенный сервер или хостинг с доступом к cron — используйте системный планировщик. Это единственный способ гарантировать выполнение задач точно по времени.
Если хостинг shared и доступа к cron нет, но задачи критичны (резервные копии, рассылки, синхронизация с CRM) — внешний сервис. Выбирайте платный тариф с гарантией uptime, если задачи действительно важны.
Если трафик стабильный, задачи не требуют точности до минуты, а проблема только в кешировании — исключите wp-cron.php из кеша и оставьте встроенный механизм.
Что ломается и как проверить
После отключения WP-Cron и настройки системного cron проверьте, что задачи выполняются. Запланируйте публикацию тестовой записи через пять минут. Если запись не вышла — проблема осталась.
Частые причины:
- неправильный синтаксис в строке cron — лишний пробел или отсутствие перенаправления вывода ломают выполнение;
- хостинг блокирует внешние запросы
wgetилиcurl— попробуйте вызывать через PHP:php /path/to/site/wp-cron.php; - задача выполняется, но плагин или тема сломаны — проверьте лог ошибок PHP (
error_logв корне сайта или в панели хостинга); - указан неверный путь к сайту в команде cron — проверьте, что URL в команде совпадает с адресом сайта в настройках WordPress.
Если системный cron настроен правильно, но задачи всё равно не выполняются — проблема может быть в ограничениях хостинга на длительность выполнения PHP-скриптов (max_execution_time). Проверьте значение через phpinfo() или уточните у техподдержки хостинга.
Что делать дальше
После настройки cron добавьте мониторинг. Плагин WP Crontrol покажет список задач в очереди, время следующего выполнения и позволит запустить любую задачу вручную для проверки. Установите его из официального каталога WordPress и зайдите в раздел «Инструменты → Cron Events».
Если используете внешний сервис — настройте уведомления о недоступности URL. Большинство сервисов умеют отправлять письмо, если запрос вернул ошибку или таймаут.
Для критичных задач (бэкапы, синхронизация заказов) настройте дублирующую проверку: раз в день запускайте скрипт, который проверяет время последнего выполнения и отправляет уведомление, если задача не запускалась больше суток.
Логотип и фирменный стиль: Три концепции разного характера, палитра с обоснованием, проверка на читаемость в малом размере и в один цвет.
Спросить за 60 ₽Источники: WP-Cron — WordPress Developer Resources, Spawning WP-Cron — WordPress Codex
Частые вопросы
Что делать, если у меня нет доступа к настройкам cron на хостинге?
WP-Cron отключен, системный cron настроен, но задачи всё равно не выполняются. Что проверить?
Можно ли оставить WP-Cron включённым и одновременно использовать системный cron?
Поменяется ли что-то после обновления WordPress?
Как понять, что проблема именно в WP-Cron, а не в самом плагине бэкапов или публикаций?
Какой интервал запуска выбрать для системного cron: каждую минуту или каждые пять минут?
Материал носит информационный характер и подготовлен редакцией «Агентуры». Он не является офертой, рекламой или индивидуальной консультацией. Упомянутые продукты, компании и торговые знаки принадлежат их правообладателям. Перед принятием решений, влекущих юридические или финансовые последствия, обратитесь к профильному специалисту.