Ссылка скопирована

Использование Server CRON вместо WP CRON

DonVardix DonVardix

Введение

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

  • Проблема: при высокой посещаемости частые запуски скрипта wp-cron.php перегружают процессор и замедляют отдачу страниц; при низкой посещаемости отложенные публикации, рассылки и бэкапы не выполняются часами из-за отсутствия трафика.
  • Решение: отключить встроенный виртуальный крон константой в wp-config.php и передать управление системному демону cron операционной системы или панели управления хостингом.
  • Результат: строго регулярный запуск фоновых задач по расписанию (например, каждые 5–10 минут) без нагрузки на посетителей и без задержек выполнения.

1. Отключение виртуального WP-Cron

Открываем конфигурационный файл в корне сайта wp-config.php и перед строкой:

/* That's all, stop editing! Happy publishing. */

добавляем директиву отключения:

define( 'DISABLE_WP_CRON', true );

После сохранения файла WordPress прекратит запускать проверку запланированных задач при визитах пользователей.

2. Настройка серверного планировщика cron

Теперь вызываем обработчик wp-cron.php на стороне сервера с фиксированным интервалом (рекомендуется раз в 5–10 минут).

2.1. Панель cPanel

  1. Перейдите в раздел Задания cron.
  2. В блоке Общие настройки выберите интервал: Раз в пять минут (*/5 * * * *).
  3. В поле Команда укажите:
    wget -q -O - 'https://example.com/wp-cron.php?doing_wp_cron' >/dev/null 2>&1
  4. Нажмите кнопку сохранения и проверьте список активных заданий.

2.2. Панель Cloudways

  1. Перейдите в меню сервера и откройте Cron Job Management.
  2. Переключитесь на вкладку Advanced и в поле ADVANCED CRON добавьте строку:
    */5 * * * * wget -q -O - 'https://example.com/wp-cron.php?doing_wp_cron' >/dev/null 2>&1
  3. Сохраните изменения и проверьте статус задания.

2.3. Настройка через Linux Crontab (CLI)

Если сайт работает на чистом VPS/VDS без графической панели, откройте crontab пользователя веб-сервера:

crontab -e

Добавьте вызов через curl или напрямую через PHP CLI (что еще быстрее, так как не расходует веб-воркеры Nginx/Apache):

*/5 * * * * php /var/www/example/wp-cron.php >/dev/null 2>&1

Вывод

Перевод планировщика на уровень сервера — обязательный шаг для любого стабильного сайта на WordPress:

  1. Мгновенный отклик фронтенда: ни один входящий HTTP-запрос посетителя больше не подвисает в ожидании завершения фоновых задач.
  2. Пунктуальность очереди: отложенные публикации, чеки WooCommerce, отправка писем и синхронизация складов запускаются строго по расписанию независимо от трафика.
  3. Эффективность ресурсов: сервер выполняет обработчик ровно раз в 5 минут, а не десятки раз в секунду во время всплесков активности.