I cron job servono a programmare attività a orari, date o intervalli fissi e periodici sul tuo sito WordPress. Alcuni esempi di cron job in WordPress potrebbero essere la programmazione della pubblicazione di un post, il controllo degli aggiornamenti o l’esecuzione di un plugin di backup secondo una pianificazione predefinita.

In WordPress, questa funzione è gestita da WP-Cron, che serve a simulare un cron di sistema. Tuttavia, a seconda del traffico sul tuo sito, l’uso del gestore cron integrato può effettivamente iniziare a influire sui tempi di caricamento delle pagine.

Quindi oggi ti mostreremo come disabilitare WP-Cron (wp-cron.php) e utilizzare invece un cron di sistema per ottenere prestazioni più veloci.

Perché disabilitare WP-Cron?

Noi di Kinsta gestiamo molti siti con traffico elevato e molto esigenti. Per questo motivo, abbiamo riscontrato numerosi problemi di prestazioni con il gestore Cron integrato in WordPress: WP-Cron.

Prima di tutto, è importante capire che WP-Cron non è un vero e proprio cron job, ma semplicemente ciò che WordPress ha creato per imitare il funzionamento del cron di sistema.

WP-Cron non funziona in modo continuo. Di default, wp-cron.php viene eseguito ad ogni caricamento della pagina, il che, nei siti con traffico elevato, può causare problemi. Se un sito non ha abbastanza thread PHP, a volte arriva una richiesta, WordPress avvia il cron, ma il cron deve aspettare il worker e quindi rimane lì inattivo.

Vale anche lo scenario opposto. Se un sito non ha molto traffico, le esecuzioni potrebbero saltare perché nessuno ha caricato una pagina.

Oltre a questo, c’è anche un motivo di sicurezza per disabilitare WP-Cron. Dato che wp-cron.php è un file accessibile pubblicamente, chiunque può attivarlo inviando una richiesta a https://yourdomain.com/wp-cron.php.

Su un sito preso di mira, questo può essere usato per far impennare ripetutamente il carico del server: un modo semplice ma efficace per rallentare o destabilizzare un sito. Disattivare WP-Cron chiude completamente questa porta.

Come disabilitare WP-Cron in WordPress (2 passaggi)

Ecco cosa fare (in questo ordine):

  1. Per prima cosa, imposta un cron job a livello di server per sostituire WP-Cron
  2. Poi, disattiva WP-Cron nel tuo wp-config.php

Se disattivi WP-Cron prima di aver impostato un sostituto, le tue attività pianificate (programmazione dei post, backup, controlli di aggiornamento dei plugin, notifiche via email) smetteranno di funzionare senza avvisarti. Nessun errore, solo attività saltate.

Passo 1: configurare un cron job a livello di server

Ora che hai capito perché WP-Cron può essere un problema, ecco come sostituirlo. Il cron di sistema funziona secondo una pianificazione predefinita ed è persino consigliato nel manuale ufficiale del plugin.

Scegli il metodo più adatto alla tua configurazione di hosting.

Usando cPanel

Se usi un host con cPanel, puoi creare un cron di sistema dal pannello di controllo. Per prima cosa, accedi a cPanel. Nella sezione Advanced, clicca su Cron Jobs.

Cron job in cPanel
Cron job in cPanel

Nella sezione “Aggiungi nuovo cron job”, puoi scegliere tra diverse pianificazioni predefinite, come due volte all’ora o una volta alla settimana. Probabilmente il tuo provider di hosting ha un limite alla frequenza con cui è possibile eseguire i cron job. Due volte all’ora è un’impostazione comune per gli hosting condivisi.

Impostazioni dei cron job di cPanel
Impostazioni dei cron job di cPanel

Aggiungi il seguente comando. Sostituisci https://domain.com con il tuo nome di dominio. Questo comando potrebbe variare leggermente a seconda di come è configurato il tuo hosting. Poi clicca su “Add New Cron Job”.

wget -q -O - https://domain.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
Aggiungere nuovo cron job in cPanel
Aggiungere nuovo cron job in cPanel

La parte >/dev/null 2>&1 del comando sopra riportato disattiva le notifiche via email.

Usando SSH e Crontab

Se hai accesso SSH al tuo server, puoi impostare il cron direttamente nel crontab del tuo server. Questo funziona su qualsiasi server basato su Linux, indipendentemente dal tuo pannello di controllo.

Connettiti tramite SSH ed esegui:

crontab -e

Poi aggiungi una delle seguenti righe (scegline una).

Usando wget (funziona su qualsiasi server):

*/15 * * * * wget -q -O - https://yourdomain.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1

Usando direttamente PHP (leggermente più veloce, senza overhead HTTP):

*/15 * * * * php /path/to/wordpress/wp-cron.php >/dev/null 2>&1

Sostituisci yourdomain.com e /path/to/wordpress con il tuo dominio effettivo e il percorso di installazione di WordPress. Il comando */15 esegue il cron ogni 15 minuti, un’ottima impostazione predefinita per la maggior parte dei siti.

Usando WP-CLI

Se usi WP-CLI, questo è spesso il metodo più pulito. Il comando cron integrato in WP-CLI esegue solo gli eventi effettivamente in scadenza, il che è più efficiente rispetto a chiamare direttamente wp-cron.php. Aggiungi questo al tuo crontab tramite crontab -e:

*/15 * * * * cd /path/to/wordpress && wp cron event run --due-now --allow-root >/dev/null 2>&1

Puoi anche usare WP-CLI per controllare i tuoi eventi programmati in qualsiasi momento senza eseguirli:

wp cron event list

Questo è utile per la risoluzione dei problemi. Mostra ogni evento cron in sospeso, quando è previsto che venga eseguito e a quale hook è collegato.

Usando di uno strumento di terze parti

Se non ti senti a tuo agio nel configurare i cron job sul tuo server o se il tuo provider di hosting non ti dà accesso, puoi anche usare una soluzione di terze parti come EasyCron.

Importante: reti multisito di WordPress

Su una rete multisito, le cose funzionano in modo leggermente diverso.

WP-Cron deve essere eseguito individualmente per ogni sito secondario, non solo per il sito principale. Se configuri un cron su un singolo server puntante a wp-cron.php sul dominio principale, i cron job per i siti secondari su domini o sottopercorsi diversi potrebbero non essere eseguiti in modo affidabile.

La soluzione più pulita è usare WP-CLI, che gestisce nativamente il multisito:

*/15 * * * * cd /path/to/wordpress && wp cron event run --due-now --url=https://yourdomain.com --allow-root >/dev/null 2>&1

Per le reti con molti siti secondari, puoi scorrerli tutti usando:

*/15 * * * * cd /path/to/wordpress && wp site list --field=url | xargs -I % wp cron event run --due-now --url=% --allow-root >/dev/null 2>&1

La costante DISABLE_WP_CRON in wp-config.php funziona allo stesso modo nel multisito: aggiungila una volta sola e verrà applicata all’intera rete.

Passo 2: disattivare WP-Cron nel file wp-config.php

Per disabilitare WP-Cron, aggiungi quanto segue al tuo file wp-config.php, proprio prima della riga che dice “Questo è tutto, smetti di modificare! Buon blogging.”

define('DISABLE_WP_CRON', true);
Disattivare WP-Cron
Disattivare WP-Cron

Salva il file e il gioco è fatto. WP-Cron non verrà più eseguito al caricamento della pagina.

Questa costante impedisce a WP-Cron di funzionare al caricamento della pagina. Non impedisce però che wp-cron.php venga chiamato direttamente. Il cron job del tuo server, configurato nel Passo 1, potrà comunque attivarlo come previsto.

Come verificare che tutto funzioni

Dopo aver completato entrambi i passaggi, vale la pena verificare che WP-Cron sia effettivamente disabilitato e che il cron del tuo server si attivi correttamente.

Opzione 1: usare il plugin WP Crcontrol

Installa e attiva il plugin gratuito WP Crontrol. Vai su Tools → Cron Events nella tua dashboard di WordPress. Vedrai un elenco di tutti gli eventi pianificati. Se WP-Cron è disabilitato correttamente, non dovresti più vedere eventi attivati ad ogni caricamento della pagina, ma solo agli intervalli in cui si attiva il cron del tuo server.

Opzione 2: controllare tramite WP-CLI

Esegui questo comando dal tuo server:

wp cron event list

Questo comando mostra tutti gli eventi cron in sospeso con l’orario della prossima esecuzione programmata. Se l’elenco sembra normale e gli eventi vengono cancellati tra un’esecuzione e l’altra, la tua configurazione funziona.

Opzione 3: controllare i log del tuo server

Se hai configurato una voce crontab, puoi reindirizzare temporaneamente il suo output a un file di log per confermare che venga eseguita:

*/15 * * * * wget -q -O - https://yourdomain.com/wp-cron.php?doing_wp_cron >> /tmp/wpcron.log 2>&1

Controlla /tmp/wpcron.log dopo 15 minuti per verificare che il processo sia stato eseguito. Una volta confermato, rimuovi il reindirizzamento del log.

Riepilogo

Disattivare WP-Cron e sostituirlo con un vero e proprio processo cron a livello di server è una modifica semplice che migliora l’affidabilità, riduce il sovraccarico e rimuove un endpoint pubblico non necessario.

Oppure puoi saltare del tutto la maggior parte della configurazione scegliendo un host che se ne occupi per te. I provider gestiti come Kinsta eseguono di default un cron lato server ogni 15 minuti, quindi devi solo disabilitare WP-Cron e lasciare che la piattaforma si occupi del resto.

Brian Jackson

Brian ha una grande passione per WordPress, lo usa da più di dieci anni e sviluppa anche un paio di plugin premium. Brian ama i blog, i film e le escursioni. Entra in contatto con Brian su Twitter.