WordPress ha un sistema di cronjobbing che si attiva solo quando qualcuno visita il sito. Se nessuno visita il sito, il sistema di cronjobbing non si attiva, le email non vengono inviate, i post non vengono pubblicati, se hai un sito con WooCommerce i prodotti non vengono sincronizzati con i market place, l’inventario non viene aggiornato… In poche parole, addio automazione!
La soluzione a questi problemi è semplice: impostare un cronjob in WordPress che non dipenda dalle visite al sito. Vediamo come fare.
Cos’è un cronjob
CronJob sta più o meno per “Lavoro a tempo” o “Lavoro temporizzato” e, in parole povere, consiste nell’esecuzione pianificata di un’azione svolta da un programma: a intervalli di tempo determinati, il comando viene eseguito senza che nessuno debba agire manualmente. Si occupa di tutto il server su cui è ospitato il tuo e-commerce.
Un cronjob, per esempio, serve per inviare ai tuoi clienti le email della newsletter (se le gestisci direttamente dal tuo e-commerce) o per sincronizzare il magazzino con il tuo gestionale o con i market places.
Insomma, i cronjob servono a svolgere tutti quei lavori ciclici che necessitano di essere eseguiti a intervalli di tempo definiti.
I cronjob di un sito web o di un e-commerce si eseguono visitando una pagina atta allo scopo. Per WordPress, per esempio, la pagina è http://example.com/wp-cron.php
.
Perchè funzionino al 100%, i cronjob andrebbero configurati a livello di sistema operativo: in questo modo allo scoccare dell'”ora X” il server chiama da solo la pagina dei cronjob ed esegue il comando autonomamente, indipendentemente da ogni condizione esterna.
Per un motivo o per l’altro, però, tutti i sistemi di commercio elettronico e i CMS moderni implementano un meccanismo più semplice: eseguono questi comandi quando qualcuno visita il sito web o l’e-commerce. Questo sistema in WordPress si chiama WP Cron: ogni volta che WordPress deve mostrare una pagina, per prima cosa esegue Wp Cron, poi mostra la pagina al navigatore.
Questo ha il vantaggio di non richiedere la configurazione dei cronjob nel server ma ha due enormi svantaggi:
- L’esecuzione del lavoro diventa estremamente incerta: infatti, poichè esso viene svolto quando qualcuno visita il sito, se nessuno visita il sito nessun comando viene eseguito autonomamente;
- I tempi di caricamento della pagina aumentano poichè prima di mostrare il contenuto, WordPress deve eseguire i comandi del cron job. E talvolta l’esecuzione di questi comandi non è proprio veloce!
È fondamentale, quindi, per un e-commerce, che i cronjob siano configurati a livello di server.
Come configurare i cronjob di WordPress con CPanel
Il modo più semplice di configurare un cronjob sul tuo hosting è usando CPanel un pannello di controllo che i servizi di hosting mettono spesso a disposizione per amministrare il tuo spazio web (prima di acquistare l’hosting per il tuo e-commerce, controlla che il piano che hai scelto preveda CPanel!).
Prima di passare a CPanel, però, un piccolo intervento su WordPress.
STEP 1: Disabilitare WP Cron in WordPress
Poichè non sarà più necessario eseguire i cron job ogni volta che un utente visiterà il sito, sarà bene disabilitare WP Cron.
Quindi, apri il file wp-config.php
e aggiungi la costante DISABLE_WP_CRON
e impostane il valore a true
:
/** Disabilita la funzione interna Wp-Cron **/ define('DISABLE_WP_CRON', true);
Carica il file wp-config.php
di nuovo sul server e passiamo a CPanel.
STEP 2: Configurare i cronjob in CPanel
Quindi, dopo aver eseguito l’accesso a CPanel, scorri la pagina fino in fondo, fino alla voce “Avanzate”: in quest’area c’è il link “Processi Cron” che ti porterà al pannello di controllo dei cronjob.
Nella nuova pagina aggiungi l’indirizzo e-mail al quale verrà notificata l’esecuzione di ogni cronjob:
In questo modo sarai sicuro che tutto funzioni nel modo giusto.
Nella sezione immediatamente sotto, configura il tuo cronjob impostando l’intervallo di tempo che desideri (30 minuti nell’immagine sotto) e il comando per richiamare il file wp-config-php
:
curl -s -H "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64)" http://www.tuo-ecommerce.it/wp-cron.php?doing_wp_cron
Se vuoi usare wget
, invece, il comando è questo:
wget -O /dev/null http://www.tuo-ecommerce.it/wp-cron.php?doing_wp_cron > /dev/null 2>&1
Il consiglio è di non usare quest’ultimo comando (inserito per completezza del post), ma di usare il comando curl
poichè con alcune configurazioni l’altro comando potrebbe venire bloccato per ragioni di sicurezza.
Clicca su “Aggiungi nuovo processo Cron” e il comando appena configurato apparirà nella sezione immediatamente sotto dove sono elencati tutti i comandi cronjob che hai configurato:
Configurare i cronjob con un servizio esterno
Ok, forse esiste un modo più semplice di CPanel.
Infatti sul web esistono alcuni servizi di cronjobbing.
Il procedimento è molto simile, solo che anzichè usare l’interfaccia di CPanel, usi l’interfaccia del servizio che hai scelto.
Una semplice ricerca su Google ti fornirà una nutrita lista di servizi.
Vedere quali cronjob sono attivi in WordPress
A questo punto abbiamo configurato il nostro cronjob ma… quali sono i cronjob che WordPress esegue?
Legittima curiosità 🙂 E allora, per sapere quali sono i cronjob che verranno eseguiti da WordPress, puoi usare il plugin WP Crontrol che, come vedi, mostra un elenco dei tempi dei cronjob impostati (Impostazioni > Cron Schedules
) e i cronjob attualmente configurati (Strumenti > Cron Events
):
In quest’ultima immagine, nota l’avviso che mi informa che ho disabilitato WP Cron
impostando la costante DISABLE_WP_CRON
a true
.
E per chiudere, un altro plugin che potrebbe tornarti utile quando un plugin che richiede l’uso di cronjob non usa le funzioni integrate di WordPress per configurarli e quindi è necessario configurarli a mano. In questo caso puoi agire direttamente dal pannello di controllo di CPanel oppure semplicemente usare Cronjob Scheduler che farà tutto al posto tuo.
4 risposte
Grazie
😃
Ciao Aerendir,
grazie per il tuo articolo molto dettagliato!
Un chiarimento.
Disattivando WP Cron, ci saranno molti comandi wpcron, usati da wordpress e plugin che quindi non verranno più eseguiti.
Se ho capito bene, questi wpcron, verranno automaticamente eseguiti da Cron job del server usando questo comando, corretto?:
‘curl -s -H “User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64)” http://www.tuo-ecommerce.it/wp-cron.php?doing_wp_cron‘
Per quando riguarda “Cronjob Scheduler” non mi è chiaro l’uso, elencherà altri wpcron che “Wp Controll” non vede perché non standard?
Quindi questi altri elencati, dovrò inserirli manualmente dentro cPanel?
Grazie
Si, disattivando wpcron, WordPress non eseguirà più lo script di cronjobbing quando qualcuno visita il sito.
Questo significa che le attività dei plugin che hanno bisogno del cronjob non verranno più eseguite automaticamente.
Poiché, però, a noi serve che queste attività siano eseguite, facciamo in modo che lo script che gestisce i cronjob sia chiamato direttamente dal nostro server a intervalli di tempo che decidiamo noi.
Quindi, per semplificare, abbiamo due alternative per chiamare lo script che gestisce i cronjob:
1. Lo facciamo chiamare a WordPress a ogni visita
2. Lo facciamo chiamare dal nostro server
Se disabilitiamo la prima opzione, allora dovremo configurare la seconda, altrimenti nessuno chiamerà lo script che gestisce i cronjob.
Il comando `curl` fa esattamente ciò che dici: fa si che sia il server a chiamare lo script (opzione 2).
Passando a CronJob Scheduler, non elencherà altri cronjob: l’ho menzionato per completezza, ma è una configurazione avanzata, da usare quando hai necessità specifiche e altamente personalizzate. Se non ne hai, allora va benissimo anche il solo cronjob via cPanel.