EL-Script

General IT knowledge base

Как проверить работу Cron в WordPress: полная инструкция

Пошаговая инструкция проверки cron в WordPress: как убедиться, что WP-Cron выполняет запланированные задачи, и что делать, если он не работает.

Коротко: Для проверки cron в WordPress начните с просмотра списка запланированных событий — установите бесплатный плагин WP Crontrol. Затем вручную выполните файл wp-cron.php через браузер или curl и убедитесь, что он возвращает пустой ответ без ошибок. Если задачи всё равно не выполняются, проверьте, не блокирует ли хостинг или плагин вызовы, и рассмотрите вариант настройки системного cron с отключением встроенного.

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

Что понадобится

  • Доступ к админ-панели WordPress
  • Права на установку плагинов
  • Возможность просмотра логов сервера (желательно)
  • Доступ к файлам сайта по FTP или через файловый менеджер хостинга (для правки wp-config.php)

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

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

По умолчанию WP-Cron запускается не по таймеру сервера, а каждый раз, когда кто-то загружает любую страницу сайта. Движок проверяет, не наступило ли время выполнения какой-либо задачи, и если да, инициирует вызов wp-cron.php в фоновом режиме. Это означает, что на низкопосещаемых сайтах задачи могут запаздывать или вовсе не выполняться, пока не произойдёт визит.

Подготовка к проверке: что понадобится

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

  • Плагин WP Crontrol (бесплатный, устанавливается из репозитория WordPress)
  • Доступ к wp-config.php
  • Браузер или curl для ручного вызова wp-cron.php
  • Логи хостинга или debug-журнал WordPress для анализа ошибок

Проверка cron с помощью плагина WP Crontrol

Самый быстрый способ увидеть, какие задачи запланированы и когда были выполнены — установить плагин WP Crontrol. Он добавляет в меню «Инструменты» страницу «Cron Events», где отображаются все зарегистрированные события, их хуки, период повтора и время следующего запуска.

  1. В админ-панели перейдите в «Плагины» → «Добавить новый», найдите WP Crontrol, установите и активируйте.
  2. Перейдите в меню «Инструменты» → «Cron Events».
  3. Изучите таблицу. В колонке «Next Run» показано, когда задача должна выполниться. Если дата просрочена (красный цвет), а событие не помечено как 'In progress', значит WP-Cron пропустил задачу.
  4. Для принудительного запуска наведите на нужное событие и выберите «Run Now». Если после этого задача выполнилась успешно, проблема в расписании — ваш сайт получает недостаточно посещений для срабатывания cron.
  5. На вкладке «Cron Schedules» можно увидеть зарегистрированные интервалы и добавить свои. Это не требуется для проверки.

Важно: Если плагин показывает много пропущенных событий, переходите к следующему разделу для углублённой диагностики.

Ручная проверка wp-cron.php через браузер или curl

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

  1. Откройте в браузере адрес https://вашсайт.com/wp-cron.php. Вы должны увидеть пустую страницу (пустой ответ).
  2. Если появляется ошибка 404 или 403, проверьте, не запрещён ли доступ к файлу через правила в .htaccess, плагин безопасности или настройки хостинга.
  3. Более информативен вызов через curl в командной строке: curl -I https://вашсайт.com/wp-cron.php. Успешный HTTP-статус 200 и пустое тело ответа говорят о том, что файл отработал без критических ошибок.
  4. Если хотите видеть вывод ошибок PHP, временно включите WP_DEBUG в wp-config.php: define('WP_DEBUG', true); define('WP_DEBUG_LOG', true);. После повторного вызова wp-cron.php ошибки появятся в файле /wp-content/debug.log.

Важно: Помните, что прямой вызов wp-cron.php инициирует выполнение всех задач, время которых наступило. Это не создаёт дублирования, если вы делаете это для диагностики.

Причины, по которым cron в WordPress может не работать

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

  • Низкая посещаемость сайта — главная особенность псевдо-крона. Если никто не заходит на сайт, задачи никогда не запустятся.
  • Включён режим обслуживания (.maintenance), который блокирует любые запросы, включая wp-cron.
  • Плагин безопасности или кэширования блокирует доступ к wp-cron.php (например, Wordfence, iThemes Security, W3 Total Cache).
  • В файле wp-config.php задана константа DISABLE_WP_CRON со значением true — это отключает автоматические вызовы при посещениях, обычно в ожидании настройки системного cron.
  • Ошибка в коде одной из задач, из-за которой PHP-скрипт завершается фатально, и cron не может добраться до остальных событий.
  • Проблемы с сервером: ограничения на выполнение фоновых запросов, недостаток памяти, таймауты.

Что делать, если cron не работает: настройка системного Cron

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

  1. Откройте wp-config.php и добавьте строку: define('DISABLE_WP_CRON', true); Это отключает механизм автоматического вызова cron при посещениях.
  2. Добавьте в crontab вашего сервера задание для вызова wp-cron.php с нужной периодичностью. Например, каждые 10 минут: */10 * * * * /usr/bin/php /полный/путь/к/wp-cron.php > /dev/null 2>&1. Или через wget: */10 * * * * wget -q -O — https://вашсайт.com/wp-cron.php > /dev/null 2>&1.
  3. Проверьте, что задание выполняется: в системным журнале cron (/var/log/syslog или уведомлениях хостинга) должны появиться строчки о запуске.
  4. Через некоторое время снова загляните в WP Crontrol: просроченных событий быть не должно. Если задачи по-прежнему не идут, проверьте пути к интерпретатору PHP и права на выполнение файла wp-cron.php (обычно 644).

Важно: Перед настройкой системного cron убедитесь, что ваш хостинг разрешает задавать задания. На виртуальном хостинге иногда доступен только интерфейс управления Cron в панели управления.

Проверка результата

  • Убедитесь, что в wp-config.php нет строки: define('DISABLE_WP_CRON', true); (если она есть, а системный cron не настроен, задача не будет выполняться).
  • Проверьте страницу «Инструменты» → «Cron Events» на наличие событий с просроченным временем.
  • Выполните ручной вызов wp-cron.php и убедитесь, что ответ приходит со статусом 200.
  • Просмотрите файл debug.log на наличие фатальных ошибок PHP.

Частые ошибки и нюансы

  • Пытаться запустить wp-cron.php через браузер без отключения WP_CRON может не помочь, если DISABLE_WP_CRON не задан — встроенный механизм всё равно будет пытаться запускаться.
  • Неправильно указан путь к интерпретатору PHP в crontab. Часто нужно прописать полный путь, который можно узнать командой 'which php'.
  • Забывают отключить WP-Cron после настройки системного, что приводит к двойному запуску задач при посещениях сайта.
  • Используют плагины кэширования, которые полностью кешируют wp-cron.php при включённом кешировании страниц; необходимо добавить wp-cron.php в исключения.
AI-инструмент

Проверить ошибку WordPress

Введите ошибку WordPress, PHP, плагина, темы, REST API или кратко опишите проблему сайта.

FAQ

Как узнать, работает ли cron в WordPress без плагинов?

Вы можете зайти в таблицу wp_options через phpMyAdmin, найти запись с option_name 'cron' и посмотреть её значение. Если в массиве есть события с просроченным временем и они не меняются, cron не выполняется. Однако это менее удобно, чем плагин.

Почему cron срабатывает только когда я захожу в админку?

По умолчанию WP-Cron запускается при любом запросе к сайту. Если вы замечаете выполнение задач только при входе в админ-панель, вероятно, на хостинге стоит кэширование для гостей, и запросы от незарегистрированных пользователей не доходят до ядра WordPress – cron не инициируется. Решение: настроить системный cron.

Можно ли полностью отключить WP-Cron?

Да, добавив define('DISABLE_WP_CRON', true); в wp-config.php. Но при этом обязательно придется настроить серверный cron, иначе никакие фоновые задачи (отложенные публикации, обновления плагинов) выполняться не будут.

Как долго задерживаются задачи при низкой посещаемости?

Задача может простаивать часы или даже дни, пока кто-то не посетит сайт. Важно помнить: временем запуска управляет не системное время, а момент ближайшего HTTP-запроса.

Безопасно ли вручную запускать wp-cron.php несколько раз подряд?

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

Что делать, если после настройки системного cron задачи не выполняются, хотя cron-задание запускается по логам?

Проверьте путь к PHP: часто нужно указывать полный путь, например, /usr/local/php74/bin/php или аналогичный, а не просто 'php'. Также убедитесь, что файл wp-cron.php доступен на чтение и выполнение. Дополнительно добавьте логирование вывода в задание crontab: */10 * * * * /usr/bin/php /path/to/wp-cron.php >> /tmp/wp-cron.log 2>&1, затем изучите лог на ошибки.

Итог

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *