Turbo Mode: почему автоматические обновления cron не работают (и как это исправить)
Проблема
Пользователи сообщают, что автоматическая регенерация файла Turbo Mode в WOOF работает ненадёжно:
Симптомы:
- Turbo mode включён с расписанием “Daily cron”
- Задача WordPress cron
woof_turbo_do_recreate_fileне создаётся - Ручная генерация файла работает отлично
- Автоматические обновления создают частичные/пустые файлы
- Регенерация файла, кажется, никогда не завершается
Влияние:
- Покупателям показывается устаревшее количество товаров в фильтре
- Плохой пользовательский опыт (покупатели видят товары, которых не существует)
- Требуется ежедневное ручное вмешательство
Почему это происходит: две основные причины
1. Состояние гонки при очистке файла
Когда WOOF регенерирует turbo-файл, процесс выглядит так:
// Step 1: Clear the file
file_put_contents($turbo_file, '');
// Step 2: Write new data (takes time)
foreach ($products as $product) {
// Heavy processing for each product...
file_put_contents($turbo_file, $data, FILE_APPEND);
}
Проблема:
Если на вашем сайте много товаров (1000+), шаг 2 может занять 60-120 секунд. Если max_execution_time в PHP (обычно 30-60 секунд) превышен, скрипт завершается посреди записи, оставляя файл пустым или частичным.
2. WordPress cron — это не настоящий cron
WordPress cron (wp-cron.php) имеет критические ограничения:
❌ Не гарантирован к запуску — срабатывает только когда кто-то заходит на сайт
❌ Может быть блокирован — плагины кэширования могут препятствовать выполнению
❌ Нет длительных задач — прерывается ограничениями выполнения PHP
❌ Ненадёжное время выполнения — может запускаться с опозданием или не запускаться вовсе
Реальный сценарий:
На ваш сайт заходят в основном в рабочие часы (с 9 до 18). Вы запланировали регенерацию turbo на 3 ночи. Результат: она никогда не выполняется, потому что никто не заходит в 3 ночи, чтобы запустить wp-cron.php.
Надёжное решение: серверный cron
Замените WordPress cron на настоящий серверный cron, который работает независимо от посещаемости сайта.
Шаг 1: отключите WordPress Cron
Добавьте в wp-config.php (перед /* That's all, stop editing! */):
/**
* Disable WordPress cron - we'll use server cron instead
*/
define('DISABLE_WP_CRON', true);
Шаг 2: добавьте запись в серверный crontab
Вариант A: используя PHP CLI (рекомендуется)
# Open crontab editor
crontab -e
# Add this line (runs daily at 3 AM)
0 3 * * * php /var/www/html/yoursite/wp-cron.php >/dev/null 2>&1
Вариант B: используя wget
# Add this line to crontab
0 3 * * * wget -q -O - https://yoursite.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
Вариант C: используя curl
# Add this line to crontab
0 3 * * * curl -s https://yoursite.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
Замените /var/www/html/yoursite на фактический путь к вашей установке WordPress.
Шаг 3: увеличьте ограничения выполнения PHP
Добавьте в wp-config.php:
/**
* Increase limits for cron tasks (turbo file generation)
*/
@ini_set('max_execution_time', 300); // 5 minutes
@ini_set('memory_limit', '512M'); // 512 MB RAM
Или создайте .user.ini в корне вашего WordPress:
max_execution_time = 300
memory_limit = 512M
Итог
Основные причины сбоев turbo cron:
- WordPress cron ненадёжен (зависит от трафика)
- Ограничения времени выполнения PHP прерывают длительные задачи
Рекомендуемое решение:
- ✅ Отключить WP_CRON
- ✅ Использовать серверный cron
- ✅ Увеличить ограничения PHP
- ✅ Запланировать на часы низкой посещаемости
Результат: Надёжная автоматическая регенерация turbo-файла с точным количеством товаров для ваших покупателей.
Ссылка: https://pluginus.net/support/topic/woof_turbo_do_recreate_file-cron-job-is-missing/