HUSKY Turbo Mode: Dlaczego automatyczne aktualizacje cron zawodzą (i jak to naprawić)
Problem
Użytkownicy zgłaszają, że automatyczna regeneracja plików Trybu Turbo WOOF’a nie działa niezawodnie:
Objawy:
- Tryb Turbo włączony z harmonogramem „Codzienny cron”
- Zadanie crona WordPress
woof_turbo_do_recreate_filenie jest tworzone - Ręczne generowanie plików działa bez zarzutu
- Aktualizacje automatyczne generują częściowe/puste pliki
- Regeneracja plików wydaje się nigdy nie kończyć
Wpływ:
- Nieaktualne liczniki filtrów wyświetlane klientom
- Słabe doświadczenia użytkownika (widząc produkty, które nie istnieją)
- Codzienna konieczność ręcznej interwencji
Dlaczego tak się dzieje: Dwie przyczyny źródłowe
1. Wyścig warunków przy czyszczeniu pliku
Gdy WOOF regeneruje plik turbo, wykonuje następujący proces:
// 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);
}
Problem:
Jeśli Twoja witryna ma wiele produktów (1000+), krok 2 może zająć 60-120 sekund. Jeśli max_execution_time PHP (zwykle 30-60 sekund) zostanie przekroczony, skrypt kończy działanie w trakcie zapisu, pozostawiając plik pusty lub częściowy.
2. Cron WordPress nie jest prawdziwym cronem
Cron WordPress (wp-cron.php) ma krytyczne ograniczenia:
❌ Nie jest gwarantowany – uruchamia się tylko, gdy ktoś odwiedzi witrynę
❌ Może być blokowany – wtyczki buforujące mogą uniemożliwić wykonanie
❌ Nie obsługuje długotrwałych zadań – zabijany przez limity wykonania PHP
❌ Niezawodne działanie czasowe – może się spóźniać lub w ogóle nie działać
Scenariusz z życia wzięty:
Twoja witryna ma ruch głównie w godzinach pracy (9:00 – 18:00). Planujesz regenerację turbo na 3:00 nad ranem. Wynik: Nigdy się nie uruchamia, ponieważ nikt nie odwiedza witryny o 3:00, aby wywołać wp-cron.php.
Niezawodne rozwiązanie: Cron po stronie serwera
Zastąp cron WordPress rzeczywistym cronem serwerowym, który działa niezależnie od ruchu na stronie.
Krok 1: Wyłącz cron WordPress
Dodaj do wp-config.php (przed /* That's all, stop editing! */):
/**
* Disable WordPress cron - we'll use server cron instead
*/
define('DISABLE_WP_CRON', true);
Krok 2: Dodaj wpis crontab na serwerze
Opcja A: Używając PHP CLI (zalecane)
# 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
Opcja B: Używając wget
# Add this line to crontab
0 3 * * * wget -q -O - https://yoursite.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
Opcja C: Używając curl
# Add this line to crontab
0 3 * * * curl -s https://yoursite.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
Zastąp /var/www/html/yoursite rzeczywistą ścieżką instalacji WordPress.
Krok 3: Zwiększ limity wykonania PHP
Dodaj do 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
Lub utwórz .user.ini w katalogu głównym WordPress:
max_execution_time = 300
memory_limit = 512M
Podsumowanie
Przyczyny źródłowe niepowodzeń crona turbo:
- Cron WordPress jest zawodny (zależny od ruchu)
- Limity czasu wykonania PHP zabijają długotrwałe zadania
Zalecane rozwiązanie:
- ✅ Wyłącz WP_CRON
- ✅ Użyj crona po stronie serwera
- ✅ Zwiększ limity PHP
- ✅ Zaplanuj na godziny o niskim ruchu
Wynik: Niezawodna, automatyczna regeneracja plików turbo z dokładnymi licznikami produktów dla Twoich klientów.
Ref: https://pluginus.net/support/topic/woof_turbo_do_recreate_file-cron-job-is-missing/