Hosting web16 dicembre 2025 186 visualizzazioni

Come configurare le attività CRON su cPanel

Come configurare le attività CRON su cPanel

Come configurare i compiti CRON su cPanel

Tempo stimato : 10 minuti
Difficoltà : Intermedia ⭐⭐
Prerequisiti : Accesso a cPanel, conoscenze di base della linea di comando


📋 Introduzione

I compiti CRON (o Cron Jobs) consentono di automatizzare l'esecuzione di script e comandi a intervalli regolari sul tuo server. È uno strumento potente per automatizzare compiti ripetitivi senza intervento manuale.

Esempi di utilizzo comuni

Compito Frequenza tipica
🔄 Backup automatici Giornaliero o settimanale
📧 Invio di newsletter Settimanale
🗑️ Pulizia di file temporanei Giornaliero
📊 Generazione di report Giornaliero o mensile
🔔 WordPress WP-Cron Ogni 15-30 minuti
💾 Sincronizzazione di dati Ogni ora
📬 Controllo email Ogni 5 minuti
🛒 Aggiornamento delle scorte (e-commerce) Ogni ora

🔢 Comprendere la Sintassi CRON

Struttura di un'espressione CRON

Un compito CRON è definito da 5 campi temporali + il comando da eseguire :

*    *    *    *    *    comando da eseguire
│    │    │    │    │
│    │    │    │    └─── Giorno della settimana (0-7) (0 e 7 = Domenica)
│    │    │    └──────── Mese (1-12)
│    │    └───────────── Giorno del mese (1-31)
│    └────────────────── Ora (0-23)
└─────────────────────── Minuto (0-59)

Valori possibili

Campo Valori Caratteri speciali
Minuto 0-59 * , - /
Ora 0-23 * , - /
Giorno del mese 1-31 * , - /
Mese 1-12 o jan-dec * , - /
Giorno della settimana 0-7 o sun-sat * , - /

Caratteri speciali

Carattere Significato Esempio
* Tutti i valori * * * * * = ogni minuto
, Elenco di valori 1,15,30 = al minuto 1, 15 e 30
- Intervallo di valori 1-5 = da 1 a 5
/ Intervallo */15 = ogni 15 unità

Esempi di espressioni CRON

Espressione Significato
* * * * * Ogni minuto
*/5 * * * * Ogni 5 minuti
*/15 * * * * Ogni 15 minuti
0 * * * * Ogni ora (al minuto 0)
0 */2 * * * Ogni 2 ore
0 0 * * * Ogni giorno a mezzanotte
0 2 * * * Ogni giorno alle 2 del mattino
30 4 * * * Ogni giorno alle 4:30
0 0 * * 0 Ogni domenica a mezzanotte
0 0 * * 1-5 Dal lunedì al venerdì a mezzanotte
0 0 1 * * Il 1° di ogni mese a mezzanotte
0 0 1 1 * Il 1° gennaio a mezzanotte
0 8,12,18 * * * Alle 8, 12 e 18 ogni giorno
0 9-17 * * 1-5 Dalle 9 alle 17, dal lunedì al venerdì

⚙️ Creare un Compito CRON su cPanel

Passo 1 : Accedere ai compiti CRON

  1. Accedi a cPanel
  2. Nella sezione Avanzato (Advanced), clicca su Compiti Cron (Cron Jobs)

Immagine

Passo 2 : Configurare le notifiche email

Prima di creare compiti, configura l'indirizzo email per ricevere i risultati :

  1. Nella sezione Email Cron, inserisci il tuo indirizzo email
  2. Clicca su Aggiorna email (Update Email)
    Immagine

💡 Consiglio : Per disattivare le notifiche di un compito specifico, aggiungi >/dev/null 2>&1 alla fine del comando.


Passo 3 : Aggiungere un nuovo compito CRON

  1. Scorri fino alla sezione Aggiungi un nuovo compito Cron
  2. Impostazioni correnti : Usa il menu a discesa per selezionare un intervallo predefinito
Opzione Espressione generata
Una volta al minuto * * * * *
Una volta ogni 5 minuti */5 * * * *
Due volte all'ora 0,30 * * * *
Una volta all'ora 0 * * * *
Due volte al giorno 0 0,12 * * *
Una volta al giorno 0 0 * * *
Una volta alla settimana 0 0 * * 0
Una volta al mese 0 0 1 * *

Passo 4 : Personalizzare l'intervallo (opzionale)

Se le opzioni predefinite non sono adatte, compila manualmente i campi :

  • Minuto : 0-59 o *
  • Ora : 0-23 o *
  • Giorno : 1-31 o *
  • Mese : 1-12 o *
  • Giorno della settimana : 0-7 o *

Passo 5 : Inserire il comando

Nel campo Comando, inserisci il comando completo con il percorso assoluto.

Esempi di comandi :

# Eseguire uno script PHP
/usr/local/bin/php /home/username/public_html/script.php

# Eseguire con wget (chiamare un URL)
/usr/bin/wget -q -O /dev/null https://monsite.com/cron.php

# Eseguire con curl
/usr/bin/curl -s https://monsite.com/cron.php > /dev/null 2>&1

# Eliminare file di più di 7 giorni
/usr/bin/find /home/username/public_html/tmp -type f -mtime +7 -delete

Passo 6 : Salvare

Clicca su Aggiungi un nuovo compito Cron (Add New Cron Job)

Il compito appare nell'elenco Compiti Cron attuali (Current Cron Jobs).


📝 Comandi CRON Comuni

Eseguire uno script PHP

/usr/local/bin/php /home/username/public_html/il-mio-script.php

💡 Il percorso verso PHP può variare. Percorsi comuni :

  • /usr/local/bin/php
  • /usr/bin/php
  • /usr/local/bin/ea-php81 (per una versione specifica)

Chiamare un URL con wget

/usr/bin/wget -q -O /dev/null https://monsite.com/cron.php
Opzione Significato
-q Modalità silenziosa (quiet)
-O /dev/null Non salvare l'output

Chiamare un URL con curl

/usr/bin/curl -s https://monsite.com/cron.php > /dev/null 2>&1
Opzione Significato
-s Modalità silenziosa
> /dev/null 2>&1 Reindirizzare tutto l'output verso null

Eliminare file temporanei

# Eliminare i file .tmp di più di 24h
/usr/bin/find /home/username/public_html/cache -name "*.tmp" -mtime +1 -delete

# Eliminare i file di più di 7 giorni in una cartella
/usr/bin/find /home/username/logs -type f -mtime +7 -delete

Salvare un database

/usr/bin/mysqldump -u db_user -p'mot_de_passe' db_name > /home/username/backups/backup_$(date +\%Y\%m\%d).sql

⚠️ Sicurezza : Evita di memorizzare le password in chiaro. Usa un file .my.cnf sicuro.


Comprimere file

/usr/bin/tar -czf /home/username/backups/sito_$(date +\%Y\%m\%d).tar.gz /home/username/public_html

🔵 Compiti CRON per WordPress

Problema con WP-Cron

WordPress utilizza un sistema di "pseudo-cron" chiamato WP-Cron che si esegue ad ogni caricamento di pagina. Su siti a basso traffico, i compiti pianificati possono essere ritardati.

Soluzione : Disattivare WP-Cron e utilizzare un vero sistema CRON.


Passo 1 : Disattivare WP-Cron

Modifica il file wp-config.php e aggiungi questa riga prima di /* That's all, stop editing! */ :

define('DISABLE_WP_CRON', true);

Passo 2 : Creare un compito CRON di sistema

Opzione A : Con wget

/usr/bin/wget -q -O /dev/null https://monsite.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1

Opzione B : Con curl

/usr/bin/curl -s https://monsite.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1

Opzione C : Con PHP direttamente

/usr/local/bin/php /home/username/public_html/wp-cron.php > /dev/null 2>&1

Frequenza raccomandata per WordPress

Tipo di sito Frequenza
Blog personale Ogni ora (0 * * * *)
Sito vetrina Ogni 30 minuti (*/30 * * * *)
E-commerce WooCommerce Ogni 15 minuti (*/15 * * * *)
Sito ad alto traffico Ogni 5 minuti (*/5 * * * *)

Configurazione completa WordPress

Intervallo Comando
*/15 * * * * /usr/bin/wget -q -O /dev/null https://monsite.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1

📋 Esempi Pratici

Esempio 1 : Backup giornaliero alle 3 del mattino

Campo Valore
Minuto 0
Ora 3
Giorno *
Mese *
Giorno settimana *
Comando /usr/local/bin/php /home/username/public_html/backup.php > /dev/null 2>&1

Espressione completa : 0 3 * * *


Esempio 2 : Pulizia della cache ogni 6 ore

Campo Valore
Minuto 0
Ora */6
Giorno *
Mese *
Giorno settimana *
Comando /usr/local/bin/php /home/username/public_html/clear_cache.php

Espressione completa : 0 */6 * * *


Esempio 3 : Report settimanale il lunedì alle 9

Campo Valore
Minuto 0
Ora 9
Giorno *
Mese *
Giorno settimana 1
Comando /usr/local/bin/php /home/username/public_html/weekly_report.php

Espressione completa : 0 9 * * 1


Esempio 4 : Aggiornamento dei prezzi ogni ora (e-commerce)

Campo Valore
Minuto 0
Ora *
Giorno *
Mese *
Giorno settimana *
Comando /usr/bin/curl -s https://monsite.com/update-prices.php > /dev/null 2>&1

Espressione completa : 0 * * * *


Esempio 5 : Eliminazione delle sessioni scadute quotidiana

Campo Valore
Minuto 30
Ora 2
Giorno *
Mese *
Giorno settimana *
Comando /usr/bin/find /home/username/tmp/sessions -type f -mtime +1 -delete

Espressione completa : 30 2 * * *


✏️ Modificare o Eliminare un Compito CRON

Modificare un compito

  1. Nella sezione Compiti Cron attuali, trova il compito da modificare
  2. Clicca su Modifica (Edit)
  3. Effettua le tue modifiche
  4. Clicca su Modifica la riga (Edit Line)

Eliminare un compito

  1. Nella sezione Compiti Cron attuali, trova il compito da eliminare
  2. Clicca su Elimina (Delete)
  3. Conferma l'eliminazione

🔧 Risoluzione dei problemi

Il compito CRON non si esegue

❌ Causa possibile ✅ Soluzione
Percorso errato verso PHP Controlla con which php in SSH
Percorso errato verso lo script Usa il percorso assoluto completo
Permessi insufficienti Controlla i permessi dello script (755)
Errore di sintassi nello script Testa lo script manualmente
Espressione CRON errata Controlla su crontab.guru

Trovare il percorso verso PHP

Collegati in SSH ed esegui :

which php

Risultato tipico : /usr/local/bin/php

Per una versione specifica :

which ea-php81

Testare un comando manualmente

Prima di creare il compito CRON, testa il comando in SSH :

/usr/local/bin/php /home/username/public_html/il-mio-script.php

Se lo script funziona manualmente, dovrebbe funzionare anche in CRON.


Ricevere notifiche di errore

Per il debug, rimuovi temporaneamente > /dev/null 2>&1 dal comando.

Riceverai quindi gli errori via email.


Errori comuni

"No such file or directory"

/bin/sh: /home/username/public_html/script.php: No such file or directory

Soluzione : Controlla che il percorso sia corretto e che il file esista.


"Permission denied"

/bin/sh: /home/username/public_html/script.php: Permission denied

Soluzione : Rendi lo script eseguibile :

chmod 755 /home/username/public_html/script.php

Oppure usa esplicitamente l'interprete PHP :

/usr/local/bin/php /home/username/public_html/script.php

"Command not found"

/bin/sh: php: command not found

Soluzione : Usa il percorso completo verso PHP (/usr/local/bin/php).


Controllare i log CRON

I log CRON si trovano generalmente in /var/log/cron (accesso root richiesto).

Su hosting condiviso, usa le notifiche email per il debug.


⚠️ Buone Pratiche

Frequenza dei compiti

⚠️ Da evitare ✅ Raccomandato
* * * * * (ogni minuto) senza motivo Minimo 5-15 minuti tra le esecuzioni
Più compiti pesanti alla stessa ora Scaglionare i compiti nel tempo
Compiti inutili Eliminare i compiti obsoleti

⚠️ Hosting condiviso : La maggior parte degli host limita i CRON a un minimo di 5-15 minuti.


Sicurezza

Pratica Raccomandazione
Passwords Non includere in chiaro nei comandi
Script sensibili Posizionare fuori da public_html
Log Monitorare regolarmente le esecuzioni
Permessi Limitare i permessi degli script

Ottimizzazione

# Buona pratica : usare nice per limitare la priorità
nice -n 15 /usr/local/bin/php /home/username/public_html/script.php

# Buona pratica : reindirizzare l'output per evitare email
/usr/local/bin/php /home/username/script.php > /dev/null 2>&1

# Buona pratica : registrare in un file per il debug
/usr/local/bin/php /home/username/script.php >> /home/username/logs/cron.log 2>&1

📊 Strumenti Utili

Generatori di espressioni CRON

Strumento URL
Crontab Guru crontab.guru
Cron Maker cronmaker.com
Generatore Crontab crontab-generator.org

Testare un'espressione CRON

Su crontab.guru, inserisci la tua espressione per vedere quando verrà eseguita:

*/15 * * * *

Risultato: "Ad ogni 15° minuto" Prossime esecuzioni: 00:00, 00:15, 00:30, 00:45, 01:00...


📝 Riepilogo

CONFIGURARE UN COMPITO CRON :

1. cPanel → Avanzato → Compiti Cron
2. Configurare l'email di notifica (opzionale)
3. Selezionare l'intervallo (menu a discesa o personalizzato)
4. Inserire il comando con percorso assoluto
5. Cliccare su "Aggiungi un nuovo compito Cron"

SINTASSI CRON :
┌─────────── Minuto (0-59)
│ ┌───────── Ora (0-23)
│ │ ┌─────── Giorno del mese (1-31)
│ │ │ ┌───── Mese (1-12)
│ │ │ │ ┌─── Giorno della settimana (0-7)
│ │ │ │ │
* * * * *  comando

INTERVALLI COMUNI :
├── */5 * * * *    → Ogni 5 minuti
├── 0 * * * *      → Ogni ora
├── 0 0 * * *      → Ogni giorno a mezzanotte
├── 0 0 * * 0      → Ogni domenica a mezzanotte
└── 0 0 1 * *      → Il 1° di ogni mese

COMANDI TIPICI :
├── PHP : /usr/local/bin/php /percorso/script.php
├── wget : /usr/bin/wget -q -O /dev/null https://url
├── curl : /usr/bin/curl -s https://url > /dev/null 2>&1
└── find : /usr/bin/find /percorso -mtime +7 -delete

WORDPRESS WP-CRON :
1. Aggiungere in wp-config.php : define('DISABLE_WP_CRON', true);
2. Creare CRON : */15 * * * * wget -q -O /dev/null https://site.com/wp-cron.php?doing_wp_cron

DISATTIVARE NOTIFICHE :
Aggiungere alla fine del comando : > /dev/null 2>&1