Оптимальная настройка wp cron
Немного истории, так вот когда создавался WordPress он должен был работать на любом хостинге, включая самый дешёвый тарифный план на котором у пользователя часто нет доступа к системному cron
и где нельзя работать через SSH, CLI и т.п. Именно поэтому сделали «псевдо-cron» в WordPress. Где запуск через HTTP без зависимости от сервера работает «из коробки» в 100% случаев и это максимальная совместимость.
Как это выглядит с точки зрения разработчиков WordPress. Смысл такой:
Лучше cron, который работает не идеально, чем cron, которого нет вообще
То есть получается если есть трафик то всё супер, а если — нет трафика, то задачи подождут первого захода)
Почему у новых, только что созданных сайтов на WordPress всё вроде как работает? У начинающих пользователей обычно нет сложных cron-задач, нет критичных по времени процессов, задачи все простые:
- публикация постов
- обновления
- иногда отправка писем
И даже если задача должна была выполниться в 12:00 например, а сайт посетили только вечером или вообще на другой день, то пользователь этого просто не замечает)))
Когда начинаются реальные проблемы с wp cron
Проблемы с wp cron появляются, когда сайт «взрослеет», то есть установили и настроили онлайн магазин на WooCommerce пошли первые заказы, статусы, письма интеграции (API, CRM), очереди задач образовались, массовые рассылки, импорт/экспорт товаров и т.д. Тут уже задержки становятся заметны, задачи могут выполняться пачками, нагрузка скачет и здесь надо уже руками настраивать серверный cron так как возможностей wp cron будет недостаточно.
Что надо сделать?
Первым делом в файле wp-config.php который находится в корневой директории вашего сайта прописываете следующие:
define( 'DISABLE_WP_CRON', true );
Эта запись отключает wp cron, далее соединяйтесь по ssh со своим сервером и прописываете такое задание в серверный cron выполним последовательно эти действия:
crontab -e
Так вы заходите в режим редактирования cron на сервере. Если делаете это первый раз вам система предложит на выбор несколько редакторов, нажмите 1 — это простой, популярный редактор nano в операционной системе Linux
*/2 * * * 1-5 /usr/local/bin/wp --path=/var/www/user/data/www/cardevice.ru cron event run --due-now >> /var/www/user/data/www/cardevice.ru/wp-cron.log 2>&1
Чтобы сохранить нажимаете на клавиатуре Ctrl O потом кнопку Enter и Ctrl X
Чтобы проверить что запись сохранилась набери в терминале:
crontab -l
Создавать задание для серверного cron лучше под тем пользователем под кем установлена система WordPress. Можно это делать и из под root, но тогда команды будут такие:
crontab -u myname1 -l
это смотреть, где myname1 — это имя пользователя.
crontab -u myname1 -e
это редактировать серверный cron
Проблемы WP Cron
- Задачи зависят от посетителей: нет трафика — задачи не выполняются
- Непредсказуемое время запуска (возможны задержки)
- При высокой нагрузке задачи могут пропускаться или выполняться с опозданием
- Долгие и ресурсоёмкие задачи могут замедлять сайт
- Нет точного соблюдения расписания
- Не подходит для критически важных или регулярных задач
Преимущества серверного cron
- Работает независимо от посещаемости сайта
- Чёткое выполнение по расписанию (например, каждую минуту)
- Высокая надёжность и предсказуемость
- Стабильная работа даже при нагрузке
- Не влияет на производительность сайта
- Подходит для любых задач, включая критически важные
- Гибкая настройка расписания (cron expressions)
Если коротко объяснить: wp cron — это чтобы работало у всех, а серверный cron чтобы работало правильно!
Выбрать хостинг