Cron è un’utility di Unix/Linux che solitamente si usa per pianificare comandi o script su un server web che vengono eseguiti in background. Un cron job è l’attività stessa che viene utilizzata per pianificare attività a orari, date o intervalli fissi. In genere si tratta di attività ripetitive che vengono automatizzate per risparmiare tempo. In WordPress, questo viene gestito da WP-Cron, che si usa per simulare un cron di sistema.

Alcuni esempi di cron job di WordPress possono riguardare la programmazione della pubblicazione di un articolo o l’esecuzione di un plugin di backup secondo un calendario predefinito. Oggi scopriremo come creare, modificare ed eseguire facilmente un cron job di WordPress.

Come Impostare un Cron Job in WordPress

È importante notare che WP-Cron è leggermente diverso da un cron di sistema e ognuno ha i propri pro e contro. Per esempio, WP-Cron si basa interamente su intervalli, mentre un cron di sistema si basa su orari specifici. Inoltre, WP-Cron funziona solo quando la pagina viene caricata (back-end o front-end), il che potrebbe essere meno affidabile. Gli intervalli predefiniti forniti da WordPress sono ogni ora, due volte al giorno e ogni giorno.

Per programmare gli eventi WP-Cron dovete creare degli hook personalizzati. Vi consigliamo di consultare il manuale ufficiale dei plugin di WordPress che contiene un’ottima guida sulla programmazione degli eventi WP Cron. Se state cercando un modo alternativo per impostare un cron di sistema con WordPress, vi consigliamo di consultare l’articolo di Tom Mcfarlin sulla definizione di un cron job di WordPress. E per coloro che non sono altrettanto esperti, vedremo come usare facilmente WP-Cron insieme al famoso plugin gratuito WP Crontrol. Questo vi permette di visualizzare e controllare ciò che accade nel sistema WP-Cron.

Plugin WordPress WP Crontrol
WP Crontrol

WP Crontrol ha più di 200.000 installazioni attive con una valutazione impressionante di 4,5 su 5. Molte persone nella comunità di WordPress amano questo plugin.

Questo plugin è molto utile. Mostra quali CRON job dovrebbero essere eseguiti, un ottimo primo passo per capire cosa sta succedendo e se sta funzionando o meno. Solo per questo gli do 5 stelle. Inoltre, puoi creare nuovi cron job e attivare quelli già esistenti, ed ecco altre 5 stelle. – Josh, creatore di Caldera Forms

Potete scaricarlo dal repository di WordPress o cercarlo nella vostra bacheca di WordPress alla voce “Aggiungi nuovi plugin”. Le caratteristiche di WP Control includono:

  • Possibilità di visualizzare tutti gli eventi cron con i relativi argomenti, la ricorrenza e l’ora di esecuzione successiva.
  • Modificare, eliminare ed eseguire immediatamente qualsiasi evento cron.
  • Aggiungere nuovi eventi cron.
  • Aggiungere, modificare e rimuovere pianificazioni cron personalizzate.

Cron del Server

Se siete clienti Kinsta, abbiamo anche un cron job del server che viene eseguito su tutti i siti ogni 15 minuti. Leggete il nostro articolo su come gestire i cron del server su Kinsta.

WP-Cron Schedules

Una volta attivato il plugin, potete modificare le pianificazioni di WordPress Cron alla voce “Cron Schedules” nelle impostazioni della vostra bacheca di WordPress. Il plugin aggiunge un’ulteriore pianificazione predefinita di tipo settimanale. Potete anche aggiungere ulteriori pianificazioni in secondi, per esempio 21600 secondi ogni 6 ore.

Schermata della sezione WP-Cron schedules nelle impostazioni WordPress
Orari di WP-Cron

Questi intervalli possono essere aggiunti anche tramite codice usando un filtro, come per esempio:

add_filter( 'cron_schedules', 'example_add_cron_interval' );

function example_add_cron_interval( $schedules ) {
 $schedules['five_seconds'] = array(
 'interval' => 5,
 'display' => esc_html__( 'Every Five Seconds' ),
 );

return $schedules;
 }

WP-Cron Events

Potete usare il plugin anche per vedere i Cron job di WordPress già programmati. Alla voce Strumenti, fate clic su “Cron Events”. Molti dei nomi delle azioni sono facilmente riconoscibili perché dovrebbero corrispondere a una parte del nome del plugin, come “woocoomerce_cleanup_sessions” o “gravityforms_cron”

Schermata WP-Cron events nella bacheca di WordPress
WP-Cron Events

Eseguite immediatamente un evento Cron facendo clic su “Run Now” accanto al nome dell’azione. Questo può essere utile per la risoluzione di problemi che potrebbero richiedere l’esecuzione multipla di un evento Cron.

Messaggio di successo dopo l'esecuzione di WP-Cron Event:
Evento Cron eseguito con successo

Modificare un Evento Cron

Potete anche modificare gli eventi Cron esistenti facendo clic su “Modifica” accanto al nome dell’azione. Potrete così modificare il nome dell’azione, gli argomenti, l’esecuzione successiva e la ricorrenza programmata. Fate attenzione, però, perché molti plugin si basano sui Cron job per funzionare correttamente.

Schermata delle opzioni di modifica dell'evento Cron
Modifica evento Cron

Aggiungere un Evento Cron

Potete anche aggiungere eventi Cron. In questo esempio, aggiungeremo il Cron job di WordPress per il plugin Disqus. Molti potrebbero volerlo fare per modificare la frequenza di sincronizzazione o se hanno problemi con la sincronizzazione dei commenti. La documentazione di ogni sviluppatore di plugin di terze parti dovrebbe riportare il nome dell’evento cron, o meglio il nome dell’azione. In questo caso si tratta di “dsq_sync_forum” che viene utilizzato dal plugin.

Se ne state creando uno da zero, avrete bisogno di un hook per l’azione corrispondente da qualche parte nel vostro codice, per esempio nel file functions.php. Questo è l’esempio fornito da WP-Crontrol:

add_action( 'my_hookname', 'my_function' );

Il passo successivo è scrivere la tua funzione.

function my_function() {
    wp_mail( '[email protected]', 'WP Crontrol', 'WP Crontrol rocks!' );
}

Per Disqus, per prima cosa aggiungiamo una nuova pianificazione cron di 600 secondi (10 minuti). Facciamo clic quindi su “Add Cron Event” e inseriamo “dsq_sync_forum” come nome dell’azione, scegliamo l’ora di esecuzione successiva e la ricorrenza di 10 minuti appena creata. Poi facciamo clic su “Add Cron Event”. Ora l’azione verrà eseguita automaticamente ogni 10 minuti per sincronizzare manualmente i commenti di Disqus con il database di WordPress.

Schermata di WordPress cron job per aggiungere un evento cron
Aggiungi Cron job WordPress

E questo è tutto! È davvero molto semplice da usare.

WP-Cron WP-CLI

Potete anche gestire gli eventi WP-Cron o un Cron job di WordPress in WP-CLI. Per esempio, il seguente comando vi fornirà l’elenco attuale degli eventi Cron.

wp cron event list

Lista eventi di Wp-cron

Leggete la documentazione ufficiale di WP-CLI cron per conoscere ulteriori comandi e parametri.

Come Aggiungere un Cron Job Usando cPanel

Se usate un web host che vi dà accesso a un account cPanel, potete usare il pannello di controllo per impostare i cron job. Per farlo, accedete al vostro account cPanel e andate su Advanced > Cron Jobs:

Schermata del cPanel da cui trovare i Cron jobs
Cron Jobs in cPanel

La pagina delle impostazioni dei Cron Jobs include opzioni per impostare le notifiche dei cron job e per crearne di nuovi. Per aggiungere un cron job, scorrete verso il basso fino alla sezione Aggiungi nuovo cron job.

Qui potrete configurare la frequenza del comando:

Schermata del Cron Job da cui configurare la frequenza della richiesta
Aggiungi un nuovo Cron Job

Il menu Commons Settings include diverse opzioni preconfigurate, che vanno da una volta al minuto a una volta all’anno. Potete usare una qualsiasi di queste opzioni o modificare i campi sottostanti per inserire un valore personalizzato:

Schermata da cui inserire i valori personalizzati
Inserite valori personalizzati

Una volta configurata la frequenza del cron job, potete aggiungere il comando che verrà eseguito nel campo Command. Salvate il cron job facendo clic su Add New Cron Job. A questo punto, il cron job apparirà nell’elenco Current Cron Jobs in fondo alla pagina.

Come Aggiungere un Cron Job in NGINX

Aggiungere un cron job in NGINX è relativamente semplice se sapete già come usare il terminale e scrivere script. Per iniziare, aprite il terminale e inserite il seguente comando:

Sudo crontab -e

Questo aprirà il file di configurazione di cron. Ogni riga del file include un cron job unico che dovrebbe avere questo aspetto:

0 13 * * * /var/www/public_html/cron.php >/dev/null

Per aggiungere un nuovo cron job in NGINX, dovete capire cosa fa questo comando. I primi numeri e asterischi specificano quando il cron job deve essere eseguito.

Ogni numero o simbolo rappresenta i seguenti valori, in ordine di apparizione da sinistra a destra:

  1. Minuti
  2. Ora
  3. Giorno del mese
  4. Mese
  5. Giorno della settimana

Questo comando indica a NGINX di eseguire il file cron.php ogni giorno alle ore 13 in punto. Usiamo gli asterischi per gli altri valori perché non sono necessari per questo specifico cron job, ma la vostra scelta potrebbe variare.

Oltre a specificare il file da eseguire, il comando indica al cron job di scartare qualsiasi risultato, come per esempio gli errori, con l’aggiunta >/dev/null . In alternativa, potete scegliere di salvare tali risultati in un file di log.

Una volta terminata la modifica del file di configurazione di cron, potete salvare le modifiche e chiuderlo. Ora il vostro server NGINX eseguirà il cron job usando la configurazione che avete impostato.

Come Aggiungere un Cron Job in Kinsta

Ci sono due modi per aggiungere un cron in Kinsta. Il primo approccio prevede l’accesso al vostro sito web tramite SSH e l’esecuzione del comando crontab -e .

Una volta eseguito il comando, Kinsta vi chiederà quale editor volete usare. Poi aprirà il file di configurazione del cron utilizzando quell’editor.

Potete aggiungere cron job al file di configurazione creando nuovi comandi su righe separate. Un comando di cron job dovrebbe assomigliare a questo:

0 13 * * * /var/www/public_html/cron.php >/dev/null

Potete leggere ulteriori informazioni su come strutturare i comandi cron nella sezione precedente, dove abbiamo visto come utilizzare il comando crontab -e in NGINX. Se non volete aggiungere manualmente il cron job, potete chiedere al personale di assistenza di Kinsta di farlo al posto vostro.

Tenete presente che Kinsta non è in grado di modificare i cron job al posto vostro e si limiterà a caricare i comandi così come ci sono stati forniti. Se avete bisogno di aiuto per configurare il comando cron, vi consigliamo di consultare la documentazione di crontab.

Come Disattivare WP-Cron

In alcuni casi, l’utilizzo della funzione WP-Cron può causare problemi al vostro sito web. WP-Cron non è un “vero” cron job, ma una funzione che ne imita il funzionamento. Invece di funzionare continuamente, WordPress esegue lo script wp-cron.php ogni volta che viene caricata una pagina.

Questo approccio può causare problemi con i siti web ad alto traffico, perché dovrete dedicare risorse all’esecuzione di wp-cron.php a ogni caricamento di pagina. Se lo script non viene eseguito a causa del caricamento della pagina, i vostri comandi programmati potrebbero non essere eseguiti, poiché wp-cron.php non sta “controllando” gli intervalli.

Se avete problemi con WP-cron, potete disabilitare la funzione aggiungendo il seguente codice al file wp-config.php di WordPress:

define('DISABLE_WP_CRON', true);

Salvate le modifiche al file e il gioco è fatto. Tuttavia, se decidete di disabilitare WP-Cron, dovrete impostare un’alternativa utilizzando uno dei metodi precedenti di questo tutorial.