Что такое WP-Cron и зачем он нужен
WP-Cron — это внутренняя система планировщика задач WordPress, которая позволяет запускать автоматические действия по расписанию. Например, публикация отложенных записей, очистка кэша, отправка email-уведомлений и другие задачи. В отличие от системного cron на сервере, WP-Cron запускается при обращении к сайту, что может приводить к несвоевременному выполнению задач при низком трафике.
Диагностика проблем с WP-Cron
Если автоматические задачи не выполняются вовремя, вероятно, WP-Cron не запускается должным образом. Проверить это можно несколькими способами:
- Используйте плагин
WP Crontrol— он показывает список запланированных событий и их статус. - Проверьте, отключен ли WP-Cron в
wp-config.php:
Если да — WP-Cron не будет запускаться автоматически.define('DISABLE_WP_CRON', true); - Убедитесь, что на сервере разрешён вызов
wp-cron.phpпо URL. - Проверьте логи сервера на ошибки при попытках запуска WP-Cron.
Пошаговое решение: настройка надёжного запуска WP-Cron
1. Отключаем встроенный WP-Cron
Добавьте в wp-config.php строку:
define('DISABLE_WP_CRON', true);Это предотвратит запуск WP-Cron при каждом визите пользователя, что снижает нагрузку.
2. Создаём системный cron на сервере
Для надёжного выполнения задач настройте системный cron, который будет вызывать WP-Cron по расписанию. Команда для crontab (например, запуск раз в 15 минут):
*/15 * * * * wget -q -O - https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1Или через curl:
*/15 * * * * curl -s https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1Замените https://example.com на ваш адрес сайта.
3. Проверяем работу WP-Cron
После настройки системного cron проверьте через плагин WP Crontrol, что запланированные задачи выполняются вовремя. Также можно добавить тестовое событие:
function test_my_cron_job() {
error_log('WP-Cron test event executed at ' . current_time('mysql'));
}
add_action('my_test_cron_hook', 'test_my_cron_job');
if (!wp_next_scheduled('my_test_cron_hook')) {
wp_schedule_event(time(), 'hourly', 'my_test_cron_hook');
}Проверьте логи PHP, чтобы убедиться, что функция выполняется.
Как проверить, что WP-Cron работает корректно
- В плагине
WP Crontrolвсе задачи должны иметь время следующего запуска в будущем и статус без ошибок. - В логах должны появляться записи о выполнении задач (если вы добавили логирование).
- Если задачи связаны с видимыми действиями (например, отложенная публикация), убедитесь, что они происходят вовремя.
Частые ошибки при работе с WP-Cron и их исправление
- DISABLE_WP_CRON не установлен, но WP-Cron не запускается: возможно, низкий трафик или блокировка вызовов
wp-cron.php. Проверьте доступность URL и логи сервера. - Системный cron не настроен при отключении WP-Cron: задачи не будут выполняться вообще. Настройте системный cron или уберите
DISABLE_WP_CRON. - Проблемы с HTTPS и редиректами: убедитесь, что URL
wp-cron.phpдоступен по HTTPS и не перенаправляет на другую страницу. - Повторяющиеся задачи: из-за ошибок в коде задачи могут дублироваться. Используйте
wp_next_scheduled()перед планированием.
Практические советы по безопасности и производительности WP-Cron
- Не планируйте слишком частые задачи — лучше раз в 15 минут или реже, чтобы снизить нагрузку.
- Ограничьте доступ к
wp-cron.phpпо IP, если возможно, чтобы предотвратить злоупотребления. - Используйте
wp_schedule_single_event()для задач, которые должны выполняться один раз. - Для длительных задач рассмотрите реализацию очередей (например, через Action Scheduler).
Сравнение способов запуска WP-Cron
| Метод | Плюсы | Минусы | Рекомендации |
|---|---|---|---|
| Встроенный WP-Cron | Прост в настройке, работает "из коробки" | Зависит от трафика, нет гарантии своевременного запуска | Подходит для сайтов с постоянным трафиком |
| Системный cron | Надёжный и регулярный запуск задач | Требует доступа к серверу и настройки | Рекомендуется для коммерческих и крупных проектов |