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
- Accedi a cPanel
- Nella sezione Avanzato (Advanced), clicca su Compiti Cron (Cron Jobs)

Passo 2 : Configurare le notifiche email
Prima di creare compiti, configura l'indirizzo email per ricevere i risultati :
- Nella sezione Email Cron, inserisci il tuo indirizzo email
- Clicca su Aggiorna email (Update Email)

💡 Consiglio : Per disattivare le notifiche di un compito specifico, aggiungi
>/dev/null 2>&1alla fine del comando.
Passo 3 : Aggiungere un nuovo compito CRON
- Scorri fino alla sezione Aggiungi un nuovo compito Cron
- 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-59o* - Ora :
0-23o* - Giorno :
1-31o* - Mese :
1-12o* - Giorno della settimana :
0-7o*
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.cnfsicuro.
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
- Nella sezione Compiti Cron attuali, trova il compito da modificare
- Clicca su Modifica (Edit)
- Effettua le tue modifiche
- Clicca su Modifica la riga (Edit Line)
Eliminare un compito
- Nella sezione Compiti Cron attuali, trova il compito da eliminare
- Clicca su Elimina (Delete)
- 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