Как отключить WP-Cron в WordPress и настроить системный cron на сервере

Как отключить WP-Cron в WordPress и настроить системный cron на сервере

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

Введение

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

В статье рассказали, как отключить встроенный планировщик WP-Cron (wp-cron.php) в WordPress и перенести выполнение задач на системный cron сервера. Объяснили, чем WP-Cron отличается от классического cron и как настроить расписание задач через терминал шаг за шагом.

Аренда VPS/VDS — от ₽219/месяц

Почему выбирают VPS от AdminVPS:

✓ Дешевле физического сервера

✓ Более гибкий и мощный, чем обычный хостинг

✓ Бесплатная защита от DDoS и техподдержка 24/7

✓ Масштабируется под любые задачи

Виртуальный сервер VPS/VDS — ваш личный сервер для сайтов, магазинов, ботов и других проектов.

popup12

Что такое WP-Cron и зачем его отключать

WP-Cron — это встроенный механизм WordPress для выполнения отложенных задач. Каждый раз, когда вы планируете что-то на потом, будь то публикация поста в определённое время, резервное копирование (бекап) базы данных по расписанию или отправка письма пользователю через час, за кулисами WordPress добавляет событие в свой список cron-задач. Специальный файл wp-cron.php отвечает за проверку этого списка и запуск нужных функций точно в назначенный час.

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

Выбирайте хостинг для CMS WordPress от надёжного провайдера.

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

Как перенести wp-cron.php на системный cron: пошаговая инструкция

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

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

Откройте файл wp-config.php в корневой папке вашего WordPress-сайта. Сделать это можно через FTP-клиент, файловый менеджер хостинга или прямо в терминале, например, с помощью редактора nano. Найдите в начале файла строку <?php и сразу после неё вставьте следующую директиву:

define('DISABLE_WP_CRON', true);

Сохраните изменения. Эта настройка отключает встроенный WP-Cron. WordPress больше не будет пытаться запускать wp-cron.php при каждом открытии сайта. Однако и запланированные задачи теперь полностью под вашим контролем, их выполнение нужно организовать на уровне сервера.

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

crontab -e

Эта команда откроет файл расписания задач (crontab) для текущего пользователя. Если вы запускаете её впервые, система может спросить, какой редактор использовать, смело выбирайте nano, так будет проще. В открывшемся редакторе внизу файла, не трогая чужие строки, если они уже есть, добавьте новую строку-пример:

*/15 * * * * wget -q -O - "http://ваш-домен.ru/wp-cron.php?doing_wp_cron" > /dev/null 2>&1

Эта строка создаёт cron-задание, которое будет выполняться каждые 15 минут (именно это обозначает */15 * * * *). Вместо ваш-домен.ru подставьте адрес вашего сайта. Команда использует утилиту wget, которая делает тихий HTTP-запрос.

-q отключает вывод сообщений, флаг -O - означает отправлять результат в стандартный поток вывода. По сути, каждые 15 минут сервер будет запрашивать ваш wp-cron.php, имитируя посещение сайта, и сразу отправлять результат в никуда. Символы >/dev/null 2>&1 как раз перенаправляют весь вывод команды и сообщения об ошибках, чтобы вы не получали уведомления на почту при каждом запуске.

После добавления строки нажмите Ctrl+O (англ. O), чтобы сохранить crontab, и Ctrl+X, чтобы выйти из редактора nano. Новое задание сохранено, системный cron зарегистрировал вашу задачу.

В примере указано каждые 15 минут. Такое значение подходит для большинства сайтов. Вы можете настроить интервал под свои нужды. Например, если у вас совсем небольшой и неторопливый проект, можно запускать cron раз в час. А для сайта с активной аудиторией или важными процессами, например, интернет-магазин с обработкой заказов, имеет смысл поставить 5 или 10 минут, чтобы все операции выполнялись оперативно. Не выбирайте слишком частый интервал без необходимости. Помните, что каждый запуск cron вызывает пусть небольшую, но нагрузку.

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

Советы по настройкам

В большинстве случаев описанных настроек вполне хватает, но есть ещё несколько моментов, которые стоит держать в голове. Если на хостинге нет доступа к собственному cron, как это часто бывает на бюджетных тарифах или при отсутствии SSH, выручат внешние сервисы. Они могут по расписанию отправлять запросы на сайт, и в этом нет ничего сложного. Зарегистрируйтесь на платформе вроде бесплатного cron-job.org или платных EasyCron и SetCronJob, добавьте туда адрес файла wp-cron.php, не забыв приписать в конце параметр ?doing_wp_cron, и задачи будут выполняться без участия встроенного механизма WordPress.

Не стоит пытаться запускать wp-cron.php напрямую командой php из консоли, так как скрипт рассчитан именно на веб-запрос, а при вызове через PHP-CLI могут отсутствовать важные переменные окружения вроде HTTP_HOST, и тогда задания просто не отработают.

При работе через CDN или прокси, например Cloudflare, прямой запрос с сервера на ваш домен может быть заблокирован как подозрительный. В таком случае лучше либо добавить IP сервера в белый список в панели Cloudflare, либо в задаче cron использовать локальный адрес, например http://127.0.0.1/ или внутреннее имя хоста.

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

Заключение

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

Читайте в блоге:

Loading spinner
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Нужен VPS сервер?

Арендуйте мощный VPS сервер для ваших проектов! Быстрая настройка, высокая производительность и надежная поддержка 24/7. Начните прямо сейчас!

Что будем искать? Например,VPS-сервер

Мы в социальных сетях