Как решить проблему остановки работы WP-Cron на высоконагруженных сайтах

Диагностика проблемы с WP-Cron на сайте WordPress

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

  • Запланированные публикации не выходят в срок
  • Автоматические задачи (очистка, обновления) задерживаются или не выполняются
  • В логах сервера или плагинов видны ошибки, связанные с WP-Cron
  • Проверка через wp cron event list показывает множество отложенных задач, которые не запускаются

Как проверить текущее состояние WP-Cron

Подключитесь по SSH к серверу и выполните команду, если установлен WP-CLI:

wp cron event list --fields=hook,next_run,generation

Если задачи долго не запускаются (next_run в прошлом), значит WP-Cron не работает корректно.

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

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

1. Отключение WP-Cron

Добавьте в wp-config.php сразу после открытия PHP-тега строку:

define('DISABLE_WP_CRON', true);

Это отключит запуск WP-Cron при обращении к сайту.

2. Настройка системного cron

Добавьте в кронтаб вашего сервера задание, которое будет запускать WP-Cron регулярно, например, каждую минуту:

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

Или с использованием curl:

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

Если у вас доступ к PHP CLI, можно сделать вызов напрямую:

* * * * * php /path/to/wordpress/wp-cron.php >/dev/null 2>&1

Замените https://example.com и путь на ваш домен и путь к WordPress.

3. Проверка cron на сервере

Убедитесь, что задание добавлено в кронтаб:

crontab -l

Должно отображаться ваше задание.

Проверка результата после внедрения

  • Следите за выполнением команд в логах сервера (например, /var/log/cron.log)
  • Проверьте через WP-CLI, что задачи запускаются своевременно:
wp cron event list --fields=hook,next_run --format=table

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

Также можно добавить тестовый крон-хук в функции темы или плагина:

add_action('my_test_cron_hook', function() { error_log('WP-Cron работает: ' . current_time('mysql')); });

if (!wp_next_scheduled('my_test_cron_hook')) {
    wp_schedule_event(time(), 'minute', 'my_test_cron_hook');
}

Проверьте логи ошибок PHP — должны появляться сообщения с отметкой времени.

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

  • Ошибка 403/401 при вызове wp-cron.php: Проверьте настройки .htaccess, файрволла и плагинов безопасности. Нужно разрешить доступ к wp-cron.php.
  • Команда cron не выполняется: Убедитесь, что cron служба запущена, а команда в кронтаб прописана корректно.
  • Некорректный URL в задании cron: Проверьте, что URL wp-cron.php доступен по HTTPS и без редиректов.
  • Отсутствие прав на запуск php из командной строки: Проверьте права пользователя, под которым запускается cron, и путь к PHP.

Практические советы для производительности и безопасности

  • Не ставьте интервал cron чаще 1 минуты — лишняя нагрузка на сервер.
  • Используйте HTTPS для вызова wp-cron.php, чтобы избежать MITM-атак.
  • Ограничьте доступ к wp-cron.php по IP, если это возможно.
  • Для больших сайтов с множеством задач используйте плагин Clearfy Pro https://wpshop.ru/plugins/clearfy?utm_source=wp-bloger.ru&utm_medium=article&utm_campaign=kak-reshit-problemu-ostanovki-raboty-wp-cron-na-vysokonagruzhennyh-sajtah — он помогает оптимизировать работу cron и очищать ненужные события.

Сравнение способов запуска WP-Cron

МетодПлюсыМинусы
WP-Cron по запросу (по умолчанию)Не требует настройки сервера, прост в использованииЗависит от посещаемости сайта, может не срабатывать на низком трафике, увеличивает время отклика
Системный cron через wget/curlНадежно и регулярно запускается, не зависит от трафикаТребует доступа к серверу, может создать лишнюю нагрузку при частом вызове
Системный cron через PHP CLIБыстрый и эффективный запуск, не гонит HTTP-запросыНеобходим доступ к CLI и правильный путь к PHP

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как добавить автоматическое удаление старых записей в WordPress
10.03.2026
Как удалить предзапланированные задачи в WP-Cron и избежать проблем с кэшированием
25.04.2026
Как избежать проблем с разрешениями при загрузке медиафайлов в WordPress
16.06.2026
Как удалить виджеты из WordPress, чтобы не потерять данные
22.12.2025
Как удалить или изменить метаданные медиафайлов в WordPress без плагинов
20.02.2026
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше