По умолчанию WordPress использует так называемый «псевдо-крон» (wp-cron.php). Он не опирается на системное время сервера, а срабатывает только тогда, когда на сайт заходит посетитель. Если на страницу никто не зашел в запланированное время, задача (публикация поста, отправка email, синхронизация товаров) просто не выполнится.
С другой стороны, на высоконагруженных сайтах каждый посетитель триггерит проверку расписания, что создает избыточную нагрузку на базу данных. В этом руководстве мы отключим стандартный механизм WordPress и настроим настоящий системный Cron в Linux, который будет работать точно по расписанию и не мешать загрузке страниц.
Почему стандартный wp-cron.php — это плохо
- Зависимость от трафика: на новых или низкопосещаемых сайтах отложенные публикации и бэкапы не срабатывают
- Лишние запросы к БД: при каждом хите WordPress делает запрос к таблице
wp_optionsдля проверки задач - Таймауты PHP: тяжелые задачи (импорт товаров, генерация sitemap) могут упереться в
max_execution_timeи упасть, оставив сайт в подвешенном состоянии - Проблемы с кэшированием: если вы настроили Redis Object Cache или FastCGI кэш в Nginx, псевдо-крон вообще не сможет выполниться, так как посетители видят только закэшированную версию
Шаг 1: Отключение стандартного wp-cron.php
Первым делом запрещаем WordPress самостоятельно вызывать cron-задачи. Откройте файл wp-config.php в корне сайта и добавьте следующую константу (желательно перед блоком с настройками БД):
// Отключаем встроенный псевдо-крон WordPress
define( 'DISABLE_WP_CRON', true );Сохраните файл. С этого момента WordPress больше не будет пытаться запускать задачи при заходах посетителей. Теперь нам нужно сказать системе, когда их запускать на самом деле.
Шаг 2: Настройка системного Cron в Linux
Подключитесь к серверу по SSH. Нам нужно добавить задачу в crontab пользователя, под которым работает веб-сервер (обычно это