Errori cron WordPress: capire le cause
Il sistema cron di WordPress (WP-Cron) è pseudo-cron: viene triggerato dalle visite alle pagine. Quando genera errori, il debug è meno ovvio. Vediamo come WP Error Monitor traccia il cron e aiuta a identificare le cause.
Come funziona WP-Cron
Quando una pagina viene caricata, WordPress controlla se ci sono eventi cron in scadenza. Se si, spawna una HTTP request a wp-cron.php in background. Questa request esegue gli action hook registrati. Se WP-Cron.php fallisce, la pagina utente NON è impattata (è parallela), ma le action non vengono eseguite.
Tipi di errori cron tipici
1) Action senza handler valido: wp_schedule_event con callback rimosso, 2) Memoria/timeout su action pesante (es. backup, sync esterno), 3) Lock cron (DOING_CRON transient) bloccato per crash precedente, 4) Cron pinging da Cloudflare/CDN bloccato, 5) Action con loop infinito che blocca anche cron successivi.
Diagnosi con WP Error Monitor
Setta WPEM_TRACK_CRON=true: l’agent registra per ogni cron event start/end, durata, memoria picco, exception. Così' vedi in dashboard 'Top cron actions' con tempi medi. Le action sopra 30s sono red flag, sopra 120s sicuramente da spostare in Action Scheduler. Errori durante cron generano eventi con flag 'context=cron'.
Action Scheduler come replacement
Action Scheduler è tecnicamente superiore a WP-Cron per ogni use case. Differenze chiave: 1) job persistenti in DB dedicato (wp_actionscheduler), 2) ritry policy configurabile (default 3 tentativi), 3) batch processing per evitare timeout, 4) UI admin (tools scheduled actions) per ispezione/gestione, 5) hook before/after action per logging. WP Error Monitor traccia Action Scheduler nativamente: 'top actions', 'failed actions', 'stuck actions' nel CRM.
System cron migration
Migrare da WP-Cron HTTP a system cron è 4 step: 1) Add define DISABLE_WP_CRON true a wp-config.php, 2) Crea entry crontab che ogni 5 minuti chiama php wp-cron.php, 3) Per WP-CLI usa wp cron event run --due-now, 4) Monitora i log cron per assicurarti che giri. Tipicamente la frequenza ottimale è ogni 5 minuti per la maggior parte dei siti.
Monitoring cron health
Setup monitoring cron specifico: ogni cron job deve loggare 'started’ e 'completed’ eventi. Se 'started’ senza 'completed’ entro window atteso, alert: cron stuck o crashed. WP Error Monitor implementa nativamente con WPEM_TRACK_CRON=true: dashboard 'Cron Health' mostra ultimo run per ogni job, durata, status. Cron mai eseguiti (es. WP-Cron HTTP che non riceve traffico da 2gg) vengono segnalati: 'Cron last run > 7 days ago' = anomaly. Particolarmente utile per blog low-traffic dove WP-Cron HTTP può restare dormiente settimane se nessuno visita.
WP-Cron Control plugin
Plugin tipo 'WP Crontrol’ aggiunge UI admin per gestire cron: vedi tutti i job schedulati, esegui manualmente, modifica schedule, elimina orfani. Particolarmente utile per debug. Combine con WP Error Monitor: nel detail di un cron event hai link a Crontrol per immediate action. Workflow tipico: WP Error Monitor segnala cron stuck, dev apre Crontrol e killa o ri-schedula. Plugin lightweight, no impact perf. Installazione consigliata per ogni sito con cron job custom non-trivial.
Tooling per cron debugging
Tooling consigliato per cron debugging: 1) WP Crontrol plugin per gestione UI dei job WP-Cron, 2) WP Error Monitor con WPEM_TRACK_CRON per metriche automatiche, 3) Action Scheduler UI nativa di WC per job Action Scheduler, 4) syslog/journald per cron Linux system, 5) custom dashboard Grafana per cron health overview. Combinazione di questi tool copre tutti gli aspetti: dalla configurazione (Crontrol) all’execution (logs) alla metric trending (Grafana). WP Error Monitor unifica via 'Cron Dashboard’ che importa dati da queste sorgenti se configurato.
Procedura passo-passo
- Setta WPEM_TRACK_CRON=true in wp-config.php.
- Lascia girare per 24h per raccogliere dati.
- Apri WP Error Monitor > 'Cron Dashboard’.
- Esamina le action più lente.
- Per action >30s, identifica il plugin colpevole.
- Sostituisci wp_schedule_event con Action Scheduler (chunks piccoli).
- Disabilita WP-Cron HTTP-based con DISABLE_WP_CRON=true.
- Imposta system cron con wp cron event run --due-now.
- Disable WP-Cron HTTP e abilita system cron.
- Migra task pesanti a Action Scheduler.
Errori comuni e come risolverli
- Cron stuck a 'DOING_CRON': Lock corrotto: delete dal transient con wp transient delete doing_cron.
- Action mai eseguita: Hook rimosso o errore di typo: wp cron event list per verificare.
- Cron triggered troppo spesso: Site molto trafficato: i 60s di interval sono ignorati. Usa system cron.
- System cron non gira: Verifica user crontab e che PHP sia eseguibile.
- Action Scheduler tabelle non create: Plugin Action Scheduler non installato o disattivato: WC lo include automatico.
Domande frequenti
D: Posso disabilitare WP-Cron del tutto?
R: Sì, con DISABLE_WP_CRON=true e system cron via crontab.
D: System cron vs WP-Cron HTTP?
R: System cron è più affidabile: nessuna dipendenza da traffico, nessun timeout HTTP.
D: Action Scheduler vs WP-Cron?
R: Action Scheduler ha retry, batch, observability: meglio per task complessi.
D: Posso usare entrambi WP-Cron e Action Scheduler?
R: Sì, sono complementari: AS per job pesanti, WP-Cron per task lightweight.
D: Frequenza cron giusta?
R: Ogni 5min è standard. Per ecommerce 1min, per blog statico 15min.
Hai bisogno di aiuto?
Se vuoi affidare il monitoraggio WordPress al team di G Tech Group, scrivici tramite il modulo di contatto.