Salta al contenuto

Cron job: cos’è e come funziona

Foto Autore
Contenuto a cura di Roberto Varriale Aggiornato il 28 Ottobre 2026 · Lettura: 14 min

Un cron job è un’attività pianificata che un sistema operativo Unix o Unix-like esegue automaticamente a intervalli regolari, senza intervento manuale. Il compito viene gestito da un demone in background chiamato cron, che legge un file di configurazione detto crontab e avvia il comando indicato al momento stabilito.

Cron job in sintesi

  • Definizione: un cron job è un comando o script eseguito automaticamente dal demone cron a un orario prestabilito.
  • Dove si configura: nel file crontab, personale per ogni utente o condiviso a livello di sistema in /etc/crontab.
  • Sintassi: cinque campi temporali (minuto, ora, giorno del mese, mese, giorno della settimana) seguiti dal comando da eseguire.
  • Intervallo minimo: i cron job locali non possono essere eseguiti più spesso di una volta al minuto.
  • Comandi principali: crontab -e per modificare, crontab -l per elencare, crontab -r per eliminare il file.
  • Limiti noti: nessun meccanismo di ripetizione automatica in caso di errore e variabili d’ambiente ridotte rispetto a una sessione utente normale.

Cos’è un cron job

Diagramma che mostra il demone cron mentre legge un file crontab e avvia uno script pianificato
Il demone cron confronta l’orario di sistema con le righe del crontab ogni minuto.

Un cron job è il singolo compito pianificato che il sistema esegue a un orario o a una frequenza stabilita, senza che nessuno debba lanciarlo manualmente. Il termine indica sia l’attività in sé sia, per estensione, l’intera riga di configurazione che la descrive.

Il meccanismo si basa su tre elementi distinti ma collegati. Cron è il demone, cioè il processo in background avviato all’accensione del sistema, che resta sempre attivo e controlla a intervalli regolari se ci sono comandi da eseguire. Crontab è il file di testo (o il comando usato per modificarlo) in cui vengono elencati i job, ciascuno con il proprio orario e il comando associato. Il cron job è infine la singola riga di quel file, ossia l’attività concreta che viene lanciata.

Questa automazione serve a eliminare operazioni ripetitive che altrimenti richiederebbero intervento umano costante: pulizia di file temporanei, backup periodici di un database, invio programmato di email, aggiornamento di contenuti o chiamate a un indirizzo web per innescare un processo lato server. Chi gestisce un sito costruito con un content management system (CMS) incontra spesso i cron job per attività come la pubblicazione programmata di articoli o la pulizia automatica della cache.

Il vantaggio principale rispetto a un’esecuzione manuale è la regolarità: un cron job non dimentica di partire e non dipende dalla disponibilità di una persona, a condizione che il sistema su cui gira resti acceso e raggiungibile al momento previsto.

Come funziona cron

Cron funziona come un controllore ciclico: ogni minuto confronta l’orario corrente con le righe contenute nei file crontab e avvia i comandi per cui il tempo di attesa è scaduto. Non esegue nulla in modo proattivo: si limita a verificare, a ogni ciclo, se una condizione temporale è soddisfatta.

Esistono due livelli di file crontab. Il crontab utente appartiene a un singolo account e può essere modificato dall’utente stesso senza privilegi particolari; viene conservato in una directory dedicata (su molti sistemi /var/spool/cron/tabs) con un file per ciascun utente. Il crontab di sistema, tipicamente in /etc/crontab o nelle sottocartelle /etc/cron.d, /etc/cron.daily, /etc/cron.weekly e /etc/cron.monthly, riguarda attività globali e può essere modificato solo da chi ha privilegi di amministratore.

Questa separazione ha una conseguenza pratica: un utente normale può programmare i propri script personali, ma non può alterare le attività pianificate per l’intero sistema, che restano sotto il controllo esclusivo dell’amministratore. La distinzione è utile anche per capire dove cercare un cron job che sembra non funzionare: prima nel crontab personale, poi nei file di sistema se il compito riguarda l’intera macchina.

Qual è la sintassi di un cron job

Schema dei cinque campi temporali di una riga crontab con i relativi intervalli numerici
Ogni campo accetta un intervallo numerico fisso prima del comando da eseguire.

Ogni riga di un file crontab è composta da cinque campi temporali seguiti dal comando da eseguire, secondo lo schema * * * * * comando. L’ordine dei campi non è intercambiabile e ciascuno accetta solo un intervallo numerico definito.

Campi temporali di una riga crontab e relativi intervalli
Posizione Campo Intervallo ammesso
1 Minuto 0-59
2 Ora 0-23
3 Giorno del mese 1-31
4 Mese 1-12 (o gen-dic)
5 Giorno della settimana 0-6, dove 0 e 7 indicano entrambi la domenica

Oltre ai numeri, i campi accettano quattro operatori base che ne modificano il comportamento:

Asterisco (*)
indica ogni valore possibile del campo, ad esempio ogni minuto o ogni ora.
Virgola (,)
elenca più valori separati, come 1,15,30 per indicare tre minuti specifici.
Trattino (-)
definisce un intervallo continuo, come 1-5 per i giorni da lunedì a venerdì.
Barra (/)
indica un passo di ripetizione, come */15 per ogni 15 minuti.

Un caso spesso frainteso riguarda la combinazione tra giorno del mese e giorno della settimana sulla stessa riga: se entrambi i campi contengono valori numerici espliciti, il comando parte quando almeno una delle due condizioni è vera (logica OR); se invece uno dei due campi contiene solo operatori come *, / o ,, la valutazione diventa una logica AND tra i due campi. Ignorare questa differenza è una delle cause più frequenti di cron job che partono in giorni diversi da quelli previsti.

Operatori avanzati di crontab

Oltre agli operatori base, alcune implementazioni di cron supportano simboli aggiuntivi pensati per casi ricorrenti nella gestione reale dei server, come backup mensili legati a giorni della settimana specifici.

  • L (Last): usato nei campi giorno del mese e giorno della settimana, indica l’ultimo valore ricorrente, ad esempio 3L per l’ultimo mercoledì del mese.
  • W (Weekday): individua il giorno feriale più vicino a una data; se il primo del mese cade di sabato, 1W sposta l’esecuzione al lunedì successivo.
  • Cancelletto (#): nel campo giorno della settimana seleziona una settimana specifica del mese con un numero da 1 a 5, ad esempio 1#2 indica il secondo lunedì.
  • Punto interrogativo (?): non assegna un valore specifico ai campi giorno del mese o giorno della settimana, lasciando che venga determinato da un altro parametro di avvio.

Questi operatori non sono disponibili in ogni variante di cron: la verifica va fatta sulla documentazione specifica del sistema in uso prima di affidarsi a una sintassi avanzata, perché un’implementazione minimale potrebbe interpretare il simbolo come un errore di sintassi anziché come un operatore valido.

Esempi pratici di crontab

Gli esempi seguenti mostrano come tradurre un’esigenza di pianificazione in una riga di crontab funzionante, combinando campi fissi e operatori.

Esempi di righe crontab e relativo comportamento
Riga crontab Effetto
0 3 * * * /path/to/script.sh Esegue lo script ogni giorno alle 03:00
*/15 * * * * /usr/bin/php /var/www/html/cron.php Esegue uno script PHP ogni 15 minuti
0 0 * * 0 /root/backup.sh Esegue un backup ogni domenica a mezzanotte
0 6,18 * * * /root/backup.sh Esegue il backup due volte al giorno, alle 6 e alle 18
0 8 1 */3 * /home/user/script.sh Esegue il comando il primo giorno di ogni trimestre alle 8:00
@reboot /root/clearcache.sh Esegue lo script ogni volta che il sistema si riavvia

Nel comando reale va sempre indicato il percorso assoluto dello script e dell’eseguibile, perché l’ambiente in cui cron opera ha una variabile PATH ridotta rispetto a una sessione da terminale: un comando che funziona digitato manualmente può fallire silenziosamente se lanciato da cron con un percorso relativo.

Come aprire e gestire crontab

La gestione del crontab personale avviene con tre comandi da terminale, validi sull’account dell’utente che li digita.

  1. Aprire il terminale e digitare crontab -e per modificare o creare il file crontab dell’utente corrente; la prima volta può essere richiesto di scegliere un editor di testo.
  2. Aggiungere o modificare una riga seguendo la sintassi a cinque campi, salvare e chiudere l’editor: cron ricarica automaticamente il file.
  3. Digitare crontab -l per visualizzare l’elenco completo dei cron job attivi e verificare che la riga sia stata salvata correttamente.
  4. Se necessario, digitare crontab -r per eliminare l’intero file crontab dell’utente; il comando non chiede conferma e non è selettivo su una singola riga.

Per intervenire sul crontab di sistema o su quello di un altro utente serve anteporre sudo al comando (sudo crontab -e), operazione riservata a chi ha privilegi di amministratore. I percorsi dei file di sistema, come /etc/crontab e le cartelle /etc/cron.daily, /etc/cron.weekly e /etc/cron.monthly, non vanno modificati con crontab -e ma direttamente come file di testo, perché seguono un formato leggermente diverso che include anche il nome dell’utente che esegue il comando.

Buone pratiche e limiti di cron

Un cron job scritto senza attenzione può fallire in modo silenzioso. Tre accorgimenti riducono la maggior parte dei problemi ricorrenti: usare sempre percorsi assoluti per eseguibili e script, verificare che lo script funzioni se lanciato manualmente prima di pianificarlo e gestire l’output in modo esplicito.

Per impostazione predefinita, se un comando pianificato produce output, cron invia una email locale all’utente proprietario del job. Per evitare l’accumulo di messaggi o file di log non voluti, è comune reindirizzare sia l’output standard sia gli errori verso /dev/null, aggiungendo >/dev/null 2>&1 in coda al comando, oppure salvarli in un file dedicato con >/home/utente/cron.log 2>&1. In alternativa, impostando MAILTO="" all’inizio del crontab si disattivano le notifiche via email per tutti i job di quell’utente.

Cron presenta però limiti strutturali da conoscere prima di affidargli operazioni critiche: l’intervallo minimo tra due esecuzioni locali è di 60 secondi, non esiste un meccanismo automatico di ripetizione in caso di fallimento (un job mancato richiede un intervento manuale per essere rieseguito) e le variabili d’ambiente disponibili sono più limitate rispetto a una sessione utente interattiva. Per attività che devono girare una sola volta, a un orario specifico, senza ricorrenza, è più indicato un comando come at piuttosto che cron.

Quale soluzione scegliere a seconda del caso

Se devi eseguire un’operazione una sola volta

Se ti serve lanciare un comando a un orario preciso senza ricorrenza, cron non è lo strumento adatto: puoi usare il comando at, pensato proprio per un’esecuzione singola programmata.

Se il sistema non resta sempre acceso

Se la macchina su cui dovrebbe girare il job non è sempre accesa, un cron job pianificato in un momento in cui il sistema è spento viene semplicemente saltato: in questo caso una variante come anacron, pensata per recuperare i job mancati al riavvio, è più adatta di cron puro.

Se serve eseguire il job senza un server proprio

Se non disponi di un server sempre attivo su cui installare cron, puoi affidarti a un servizio di scheduling esterno che richiama un indirizzo web a intervalli regolari al posto di un crontab locale.

Se il job deve chiamare un’API esterna

Se l’attività pianificata consiste nel richiamare periodicamente un endpoint, il cron job diventa un semplice trigger temporale che inoltra la richiesta a una API (Application Programming Interface), con la logica di elaborazione demandata interamente al servizio chiamato.

Alternative e strumenti correlati a cron

Cron non è l’unico sistema di pianificazione disponibile: alcuni ambienti usano strumenti nativi diversi, mentre per chi lavora su infrastrutture cloud o serverless esistono servizi di scheduling dedicati.

Su macOS e sistemi Darwin, l’equivalente di cron è launchd, un demone che gestisce sia i processi all’avvio del sistema sia le attività pianificate tramite file di configurazione in formato diverso da crontab. Per i sistemi che non restano sempre accesi, anacron integra cron recuperando i job mancati al riavvio invece di saltarli definitivamente.

Diversi servizi esterni replicano il comportamento di cron tramite richieste HTTP programmate, utili quando non si dispone di un server sempre attivo su cui installare un demone locale. GitHub Actions, nel piano gratuito per repository private, fornisce 2.000 minuti di esecuzione al mese con un intervallo minimo di 5 minuti tra le pianificazioni, un limite più ampio rispetto al minuto singolo di cron locale (Free Cron & Job Schedulers 2026: QStash, cron-job.org & More (2026)). Google Cloud Scheduler include 3 job gratuiti al mese per account di fatturazione, con un costo di 0,10 dollari per job-mese oltre questa soglia (Free Cron & Job Schedulers 2026: QStash, cron-job.org & More (2026)). Val Town consente invece intervalli cron di 15 minuti nel piano gratuito, fino a 100.000 esecuzioni al giorno (Free Cron & Job Schedulers 2026: QStash, cron-job.org & More (2026)).

Esistono anche servizi specializzati nel monitoraggio dell’esecuzione dei cron job, pensati per segnalare quando un job pianificato non parte o fallisce: una verifica che il semplice demone cron non effettua da solo.

Confronto tra servizi di scheduling e monitoraggio gratuiti

Quando il cron job non gira su un server personale ma tramite un servizio esterno, i piani gratuiti variano per limiti di frequenza, numero di job e capacità di monitoraggio.

Limiti dei piani gratuiti di alcuni servizi di scheduling e monitoraggio
Servizio Tipo Limite principale del piano gratuito
Upstash QStash Scheduling messaggi 1.000 messaggi al giorno e 10 pianificazioni attive
GitHub Actions Esecuzione script 2.000 minuti al mese, intervallo minimo 5 minuti
Val Town Scheduling cron Intervalli di 15 minuti, fino a 100.000 esecuzioni al giorno
Google Cloud Scheduler Scheduling cloud 3 job gratuiti al mese per account di fatturazione
Healthchecks.io Monitoraggio 20 monitor
UptimeRobot Monitoraggio 50 monitor
Cronitor Monitoraggio (piano Hacker) 5 monitor

I dati sono aggiornati al 2026 (Free Cron & Job Schedulers 2026: QStash, cron-job.org & More (2026); 5 Best Free Cron Job Monitoring Tools (2026, Compared) (2026)). Un dato da considerare prima di affidarsi a un servizio esterno è la possibilità di ritardi: in un caso documentato, un servizio di scheduling cloud ha registrato un ritardo di pianificazione di 19 ore nell’aprile 2026 (Free Cron & Job Schedulers 2026: QStash, cron-job.org & More (2026)), un rischio da valutare per i job dove la puntualità è critica.

Errori frequenti nella configurazione di un cron job

Alcuni errori ricorrono con frequenza in chi configura un crontab per la prima volta, e condividono una caratteristica comune: non generano un messaggio di errore visibile, ma semplicemente impediscono al job di comportarsi come previsto.

  • Percorsi relativi: usare python3 script.py invece del percorso assoluto /usr/bin/python3 /home/utente/script.py può far fallire il comando, perché l’ambiente di cron non eredita il PATH completo della shell interattiva.
  • Carattere percentuale nel comando: il simbolo % viene interpretato da cron come un ritorno a capo; va sempre preceduto da un escape (%) se deve comparire letteralmente, ad esempio in un comando con data dinamica.
  • Riga finale senza ritorno a capo: se l’ultima riga del file crontab non termina con un carriage return, quella riga viene ignorata durante il caricamento.
  • Confusione tra giorno del mese e giorno della settimana: impostare entrambi i campi con valori numerici espliciti produce una logica OR, non AND, con il rischio di esecuzioni più frequenti del previsto.
  • Job mancato durante lo spegnimento: un cron job pianificato mentre il sistema è spento non viene recuperato automaticamente da cron puro; serve anacron o un controllo manuale successivo.

Domande frequenti sui cron job

Cos’è un cron job?

Un cron job è un’attività pianificata che il demone cron esegue automaticamente a un orario o a una frequenza definita in un file crontab, senza che un utente debba avviarla manualmente ogni volta.

Come funziona cron?

Cron gira in background come demone, controlla ogni minuto il contenuto dei file crontab e avvia i comandi per cui il tempo stabilito è arrivato, confrontando l’orario di sistema con i cinque campi temporali di ciascuna riga.

Cos’è un crontab?

Il crontab è il file di testo (o il comando per modificarlo) che elenca i cron job di un utente o del sistema, con un formato composto da campi temporali seguiti dal comando da eseguire.

Qual è la sintassi di crontab?

Ogni riga di crontab è formata da cinque campi — minuto, ora, giorno del mese, mese, giorno della settimana — seguiti dal comando da avviare, con operatori come asterisco, virgola, trattino e barra per combinare i valori.

Come aprire crontab?

Il crontab dell’utente corrente si apre con il comando crontab -e da terminale; per modificare il crontab di un altro utente o di sistema serve eseguire il comando con privilegi di amministratore tramite sudo.

Dove si trova il file crontab?

Il crontab personale è conservato in una directory dedicata per utente, spesso /var/spool/cron/tabs, mentre il crontab di sistema si trova tipicamente in /etc/crontab o nelle sottocartelle /etc/cron.d, /etc/cron.daily, /etc/cron.weekly e /etc/cron.monthly.

Come vedere i cron job attivi?

Per visualizzare l’elenco dei cron job dell’utente corrente si usa il comando crontab -l, che mostra tutte le righe salvate nel file crontab personale senza aprirle in modifica.

Fonti e riferimenti

Questo contenuto ti ha aiutato?

Ti è stato utile questo articolo?

Aiuta altri professionisti a crescere. Condividi questo contenuto con il tuo network.

Iscriviti alla Newsletter

Ricevi una sola mail a settimana con strategie, casi studio e consigli pratici per scalare la tua impresa. Zero spam, promesso.

Quanto fa + ?

Roberto
Varriale

In quasi 20 anni ho aiutato oltre 700 Micro Imprese a migliorare il ROI aumentando Vendite e clienti con il Traffico Organico.

Chi Sono

"Se questa risorsa ti è stata utile, valuta se seguirmi anche nei social sia l'investimento di tempo migliore che tu possa fare adesso."

Roberto Varriale