Как решить проблему недоступности WP-Cron в WordPress

Почему WP-Cron может не срабатывать

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

Основные причины недоступности WP-Cron

  • Отключение вызова wp-cron.php через константу DISABLE_WP_CRON в wp-config.php.
  • Блокировка запросов к wp-cron.php на уровне сервера (firewall, .htaccess, nginx config).
  • Низкая посещаемость сайта, из-за чего cron-запуски не инициируются.
  • Таймауты и ошибки при выполнении скрипта cron.

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

Чтобы понять, работает ли WP-Cron корректно, выполните следующие шаги:

  1. Проверьте наличие константы DISABLE_WP_CRON в wp-config.php и её значение. Если она установлена в true, WP-Cron отключён.
  2. В браузере попробуйте вручную открыть https://ваш_сайт/wp-cron.php?doing_wp_cron. Если страница возвращает ошибку 403, 404 или 500 — это проблема доступа.
  3. Установите плагин «WP Crontrol» (https://ru.wordpress.org/plugins/wp-crontrol/) и проверьте, отображаются ли запланированные события и когда они запланированы к исполнению.
  4. Просмотрите логи сервера на предмет ошибок при вызове wp-cron.php.

Пошаговое решение проблемы недоступности WP-Cron

1. Отключите встроенный WP-Cron и настройте системный cron

В wp-config.php добавьте или проверьте наличие строки:

define('DISABLE_WP_CRON', true);

Это отключит запуск WP-Cron при каждом визите.

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

* * * * * wget -q -O - https://ваш_сайт/wp-cron.php?doing_wp_cron >/dev/null 2>&1

Или используйте curl:

* * * * * curl -s https://ваш_сайт/wp-cron.php?doing_wp_cron >/dev/null 2>&1

2. Проверьте доступность wp-cron.php на уровне сервера

Убедитесь, что нет правил блокировки в .htaccess или конфигурации nginx. Пример правильной части .htaccess для Apache:

# Разрешить доступ к wp-cron.php<br> <Files wp-cron.php><br>    Require all granted<br> </Files>

Для nginx:

location = /wp-cron.php {<br>    allow all;<br>    fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;<br>    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;<br>    include fastcgi_params;<br>}

3. Оптимизируйте производительность WP-Cron

  • Уменьшите частоту запуска системного cron, если сайт большой и задач много, например, каждые 5 минут.
  • Проверьте, нет ли «зависших» задач, которые тормозят выполнение. Для этого используйте WP Crontrol.
  • Избегайте долгих операций в cron-заданиях — разбивайте задачи на мелкие шаги.

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

  • В плагине WP Crontrol проверьте, что запланированные задачи выполняются и время следующего запуска обновляется.
  • Проверьте в админке, что отложенные публикации выходят в эфир в нужное время.
  • Просмотрите логи веб-сервера и PHP на отсутствие ошибок при вызове wp-cron.php.
  • Для проверки вручную можно вызвать https://ваш_сайт/wp-cron.php?doing_wp_cron и убедиться в ответе без ошибок.

Частые ошибки и способы их исправления

  • Ошибка 403 при вызове wp-cron.php: Проверьте правила доступа в .htaccess и firewall. Добавьте разрешающие правила.
  • Константа DISABLE_WP_CRON не установлена, но cron не работает: Возможно, сервер блокирует внутренние HTTP-запросы. Проверьте настройки PHP (allow_url_fopen, cURL).
  • Зависшие задачи в WP-Cron: Используйте WP Crontrol для удаления или повторного запуска проблемных событий.
  • Системный cron не вызывается: Проверьте crontab пользователя, под которым запущен сервер, и права на выполнение wget/curl.

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

  • Не запускайте WP-Cron чаще, чем это необходимо — это нагружает сервер.
  • Закрывайте доступ к wp-cron.php для IP, кроме вашего cron-сервера, если вы используете системный cron, чтобы избежать лишних вызовов.
  • Используйте HTTPS при вызове wp-cron.php для безопасности.
  • Регулярно проверяйте и удаляйте устаревшие или неиспользуемые cron-задачи через WP Crontrol.
  • Если у вас много задач, рассмотрите использование внешних сервисов для cron, например, EasyCron или аналогичных, чтобы разгрузить сервер.

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

МетодПлюсыМинусыКогда использовать
Встроенный WP-Cron (по визитам)Прост в настройке, не требует доступа к серверуНестабилен при низкой посещаемости, может вызывать задержкиМаленькие сайты с регулярным трафиком
Системный cron на сервереНадежный, запускается по расписанию независимо от трафикаТребует доступа к серверу, базовых знаний LinuxСредние и крупные сайты, магазины WooCommerce
Внешние сервисы cronНе зависит от сервера, позволяет гибко настраиватьМожет быть платным, требует настройки URL с защитойСложные проекты с большим количеством задач

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

⭐⭐⭐⭐⭐
Как удалить записи по автору в WordPress программно
16.01.2026
Как создать автоматический импорт пользователей в WordPress с помощью CSV
04.02.2026
Как добавить мультиязычность в WooCommerce без плагинов
26.04.2026
Как сделать автоматический rollback обновлений WordPress при ошибках
25.03.2026
Как удалить неиспользуемые изображения в WordPress и освободить место
23.12.2025
×
Обнови свой WordPress!

Держи скидку 15% на премиум тему Reboot

Купить со скидкой ⋙