Se usi Linux quotidianamente, prima o poi avrai bisogno Automatizza le attività ripetitive con Cron e CrontabBackup, aggiornamenti, generazione di report, pulizia dei file, monitoraggio... Fare tutto manualmente richiede molto tempo ed è facile dimenticarsene. È qui che entra in gioco Cron, un pilastro dell'amministrazione di sistemi Unix e GNU/Linux da decenni.
Anche se a prima vista la sintassi di Crontab può sembrare un po' intimidatoria, una volta compresa la sua logica, vedrai che Pianificare le attività in Linux con Crontab è molto più semplice di quanto sembriQuesto articolo fornisce una guida completa: cos'è Cron, cos'è Crontab, come scrivere regole, come risolvere gli errori, il suo potenziale impatto sulle prestazioni, strumenti esterni che è possibile utilizzare, alternative in altri sistemi e casi d'uso sia domestici che aziendali.
Differenze tra Cron e Crontab
Si parla spesso di Cron e Crontab come se fossero la stessa cosa, ma in realtà Sono due pezzi diversi che funzionano insieme.Comprendere questa differenza ti risparmierà un sacco di problemi quando dovrai eseguire il debug di attività che non sono in esecuzione.
- cron È il demone che viene eseguito in background dal momento in cui il sistema viene avviato. Il suo compito è molto semplice: rivedere una serie di file di configurazione ogni minuto e verificare se è necessario eseguire attività pianificate in base alla data e all'ora del sistema.
- crontab, nel frattempo, è il file di testo in cui sono definite tali attività Ogni utente può avere il proprio file crontab, con le proprie regole e script, che vengono eseguiti con i propri permessi. Il demone Cron legge questi file ed esegue i comandi quando necessario.
In qualsiasi distribuzione Linux moderna troverai entrambi i componenti disponibili di default, quindi È possibile pianificare attività ricorrenti praticamente in qualsiasi distribuzione, che si tratti di Debian, Ubuntu, Oracle Linux, CentOS, Rocky, Fedora, ecc.
Che cos'è Cron e perché il tempo di sistema è fondamentale?
Cron è un demone di sistema che si avvia all'avvio di LinuxDi solito viene avviato tramite script di avvio classici in / Etc / init.d o su percorsi equivalenti come /etc/rc.doppure utilizzando le unità systemd (service crond o cron, a seconda della distribuzione). Controlla ogni minuto:
/etc/crontab, /etc/cron.d, /var/spool/cron e /var/spool/cron/crontabs (Il percorso esatto varia a seconda della distribuzione), cercando voci che corrispondono al minuto corrente. Se ne trova, esegue il comando indicato.
Una cosa che molte persone trascurano è che Cron si basa completamente sull'ora di sistemaSe l'orologio o il fuso orario non sono impostati correttamente, le attività verranno eseguite all'orario sbagliato. Per controllare l'ora sui sistemi moderni, è possibile utilizzare:
timedatectl
Questo comando visualizza l'ora locale, UTC, il fuso orario e se il sistema si sta sincronizzando con i server NTP (Network Time Protocol). Idealmente, La sincronizzazione NTP è attivaperché in questo modo l'orologio si corregge automaticamente.
Se vedi che il fuso orario non è corretto, puoi cambiarlo con qualcosa come timedatectl set-timezone Europe/Madrid o un'altra zona che corrisponda al tuo Paese. Inoltre, in molte installazioni Linux, NTP è configurato automaticamente, ma se vuoi personalizzarlo, puoi... /etc/ntp.conf oppure utilizzare servizi alternativi come Chrony.
Che cos'è Crontab e come è strutturato?
Crontab è il file in cui scrivi le regole di esecuzione per le attività pianificateOgni riga (ignorando i commenti) rappresenta un "processo": quando viene eseguito e quale comando viene eseguito. In genere, ogni utente ha il proprio crontab nella directory di spool. / var / spool / cron o /var/spool/cron/crontabs, secondo la distribuzione.
Per gestire il tuo crontab personale, usa il comando crontab Con diverse opzioni molto basilari ma potenti. I file non vengono modificati manualmente con un editor raw, ma tramite questo comando per evitare errori di autorizzazione o formattazione.
La sintassi di base di una singola riga in Crontab si basa su cinque campi di tempo più il comando:
m h dom mon dow comando
- minuto (m): valori da 0 a 59.
- Tempo (h): valori da 0 a 23.
- Giorno del mese (Sole): da 1 a 31.
- mese (mon): da 1 a 12 o nome abbreviato (gen, feb, ecc., a seconda del sistema).
- Giorno della settimana (in basso): da 0 a 6 o da 0 a 7, con domenica che corrisponde a 0 (e talvolta anche a 7).
- comando: qualsiasi comando che potresti eseguire nel terminale, inclusi script e reindirizzamenti.
Un esempio tipico sarebbe:
00 19 * * * /home/usuario/scripts/backup.sh
Questa riga indica che lo script verrà eseguito tutti i giorni alle 19:00 (19:00), indipendentemente dal giorno del mese, dal mese o dal giorno della settimana.
Come creare, modificare ed elencare il tuo Crontab
Per lavorare con il tuo file di attività personali, utilizzi quasi sempre il comando stesso. crontab. L'idea è quella Non modificare manualmente i file in /var/spool/cron/crontabs, poiché sono progettati per essere gestiti automaticamente dal sistema.
Gli ordini più comuni sono:
- crontab -eApri il tuo crontab nel tuo editor di testo predefinito (in molte distribuzioni) vim o nano) per creare o modificare voci.
- crontab -l: visualizza sullo schermo tutte le attività pianificate per l'utente.
- crontab -rElimina l'intero crontab; questa è un'azione irreversibile. Non chiede conferma se non aggiungi -i.
- crontab -i -r: chiede conferma prima di eliminare il crontab.
- file crontab: sostituisce il crontab corrente con il contenuto del file specificato.
- utente crontab -u: gestisce il crontab di un altro utente (solo root o coloro che hanno i permessi).
- crontab -c dir: Nei sistemi che lo supportano, definisce la directory in cui verrà memorizzato il crontab.
Se vuoi eseguire il backup delle tue impostazioni, puoi fare qualcosa di semplice come:
crontab -l > ~/crontab_backup.txt
E se in seguito hai bisogno di ripristinarlo, basta:
crontab ~/crontab_backup.txt
Sintassi avanzata: caratteri speciali in Crontab
Oltre ai numeri, Crontab consente di utilizzare Caratteri speciali che rendono la sintassi molto più flessibileGrazie ad essi è possibile esprimere intervalli, liste o intervalli in modo compatto.
- * (asterisco): indica "tutti i valori possibili" in quel campo. Ad esempio, * nel campo ore Significa tutte le ore.
- , (virgola): uno separato elenco di valori specifici. Esempio:
0 6,18 * * *Parte alle 6:00 e alle 18:00. - - (sceneggiatura): definisce un gamma continua. Esempio:
0 8-17 * * 1-5È attivo ogni ora dalle 8:00 alle 17:00, dal lunedì al venerdì. - / (barra): segna un passo o intervallo. Ad esempio,
*/10 * * * *significa "ogni 10 minuti". - intervallo/eccetto (a seconda dell'implementazione): alcune varianti consentono di definire valori esclusi, sebbene ciò non sia standard in tutti i cron job.
Un tipico esempio di utilizzo combinato sarebbe:
*/5 2 * * 1-5 /bin/ejecutar/script.sh
Questa riga avvia il comando ogni 5 minuti durante l'ora 2 (2:00) dal lunedì al venerdìÈ un modo compatto per sostituire un lungo elenco di minuti.
Il personaggio # (cancelletto) all'inizio della riga serve a aggiungi commentiTutto ciò che segue quel simbolo sulla stessa riga viene ignorato, il che è perfetto per documentare il motivo per cui un processo esiste o per disattivarlo temporaneamente senza eliminarlo.
Parole chiave e scorciatoie temporali in Crontab
Per i casi più comuni, Crontab offre scorciatoie sotto forma di "parole riservate" Sostituiscono tutti i campi temporali. Sono molto utili quando si desidera qualcosa come "ogni giorno" o "ogni ora" senza dover pensare ai numeri.
- @riavviare: esegue il comando una volta avviato il sistema.
- @annuale o @annualmente: una volta all'anno, equivalente a 0 0 1 1 *.
- @mensile: una volta al mese, il primo giorno a mezzanotte, equivalente a 0 0 1 * *.
- @settimanalmente: una volta alla settimana, a mezzanotte del giorno 0 (solitamente domenica), equivalente a 0 0 * * 0.
- @quotidiano o @mezzanotte: una volta al giorno, alle 00:00, equivalente a 0 0 * * *.
- @ogni ora: una volta ogni ora, al minuto 0, equivalente a 0 * * * *.
Ad esempio, se vuoi che uno script venga eseguito ogni ora, basta con:
@hourly /bin/ejecutar/script.sh
E se vuoi che uno script di manutenzione inizi dopo ogni riavvioDovresti usare:
@reboot /ruta/a/mi_script.sh
Variabili di ambiente e sintassi dei comandi
Una tipica fonte di errori è che Cron viene eseguito in un ambiente minimoNon ti sta caricando .bashrc né l'intero ambiente utente, quindi il PATH è molto limitato (di solito è qualcosa del tipo /usr/bin:/binCiò rende i comandi come Python, Git, PHP o Pip Non possono essere trovati se non si utilizza il percorso assoluto.
Per evitare ciò, hai due opzioni: Utilizzare sempre percorsi completi nei tuoi script (ad esempio, /usr/bin/python3 invece di python) O Definisci le variabili di ambiente all'inizio del tuo crontabUn esempio potrebbe essere:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
SHELL=/bin/bash
HOME=/home/usuario
Queste righe sono posizionate all'inizio del file crontab, senza campi temporalie influenzare gli altri lavori dichiarati di seguito. Puoi anche definire PAVIMENTO per indicare a quale indirizzo e-mail vengono inviati gli output standard ed error dei lavori.
Ricordare I comandi in Crontab accettano tutta la sintassi della shellÈ possibile reindirizzare l'output a un file, concatenare i comandi con pipe, ecc. Ad esempio, per salva tutto l'output dello script in un registro:
* * * * * /home/usuario/helloworld.sh >> /var/log/logs.log 2>&1
E se volete silenzia completamente i messaggi e non ricevere email Per quel lavoro, puoi reindirizzare a / Dev / null:
* * * * * /home/usuario/helloworld.sh >/dev/null 2>&1
Gestione dell'output: registri ed e-mail
A seconda della distribuzione e della configurazione, l'output di Cron può essere gestito in diversi modi. Su sistemi come Oracle Linux o Debian minimale, se non è installato alcun agente di posta, Il demone cron invia l'output direttamente al sistema di registrazione..
In molti casi è possibile visualizzare l'attività cron in file come:
- /var/log/cron (tipico in Oracle Linux, CentOS, RHEL).
- / Var / log / syslog (comune in Debian e derivati).
Ad esempio, per filtra solo i messaggi relativi a cron Su un sistema che utilizza syslog, puoi fare qualcosa di simile a:
grep CRON /var/log/syslog
Le informazioni sono solitamente brevi (ora, utente, comando), ma aiutano a capire se qualcosa funziona o se sta fallendo.
Se installi un Mail Transport Agent (MTA) come Postfix o Sendmail, quindi viene inviato l'output dei lavori alla coda di posta locale dell'utenteNormalmente è conservato in /var/spool/mail/$USER o percorsi simili, e puoi leggerlo con strumenti come posta x (comando mail).
Inoltre, puoi controllare il destinatario delle email cron utilizzando la variabile PAVIMENTO all'inizio del crontab:
MAILTO="tu.correo@ejemplo.com"
Se invece lasci MAILTO vuoto, in questo modo:
MAILTO=""
Poi Nessuna email verrà inviata per nessuno dei lavori definiti in quel crontabQuesta funzione è utile se si hanno molte attività che generano output costanti.

Strumenti e utilità per lavorare con Cron
Se non ti senti a tuo agio nello scrivere espressioni cron a mano, ce ne sono diverse Strumenti che ti aiutano a generare regole senza commettere erroriAlcuni sono servizi web, altri sono applicazioni grafiche.
- Guru di Crontab: Una pagina molto pratica in cui si scrive un'espressione cron e... Spiega in un testo leggibile cosa faTi avvisa degli errori e offre esempi e suggerimenti comuni.
- Generatore di Cron JobAssistente online per la generazione di espressioni cron da opzioni come ora, giorno, intervallo, ecc. Consente di creare lavori ricorrenti con impostazioni predefinite e personalizzarli.
- EasyCron: servizio cloud per pianificare le richieste HTTP agli URL a intervalli specificati. Ampiamente utilizzato per avviare script web, attività API, ecc., con un pannello di controllo, registri e avvisi e-mail.
- Cron di KDE (KCron): uno strumento grafico integrato nell'ambiente KDE per Crea, modifica ed elimina cron job senza toccare la riga di comandoConsente di selezionare orari e date da un'interfaccia visiva.
- Cron Maker: generatore di espressioni cron online progettato per integrarsi con la libreria Quartz (ampiamente utilizzato negli ambienti Java), ma utile anche per comprendere combinazioni complesse.
Queste utilità non sostituiscono Cron sul tuo sistema, ma Semplificano la parte compositiva dell'espressioneriducendo gli errori di sintassi.
Tipi di Crontab: sistema e utente
In Linux ci sono due tipi principali di file di configurazione per le attività pianificate: sistema crontab e i utente crontabEntrambi utilizzano una sintassi molto simile, ma non vengono gestiti allo stesso modo.
El Cronab del sistema, normalmente dentro / etc / crontab e nei file di /etc/cron.d, di solito richiede permessi di rootViene utilizzato per attività di sistema critiche (rotazione dei log, manutenzione del database, attività di backup di alto livello, ecc.) e, a differenza del crontab utente, incorpora esplicitamente il campo utente in ogni riga per indicare Con quale identità viene eseguito il comando?.
I Utente crontab sono gestiti con crontab -e e sono conservati in /var/spool/cron/crontabs o posizione simile. Solo l'utente può inviare i propri lavori. (o root, che può gestire i cron job degli altri) e non dovrebbero essere modificati direttamente. Per limitare chi può usare cron, puoi modificare i file /etc/cron.allow y /etc/cron.deny.
Impatto di Cron e Crontab sulle prestazioni
Sebbene Cron stesso consumi pochissime risorse, una scarsa pianificazione delle attività può avere un impatto negativo sulle prestazioni del sistemaDi solito il problema non è il demone cron, ma ciò che gli comandiamo di eseguire.
Quando si pianificano molte attività da attivare contemporaneamente, è possibile causare Picchi di utilizzo di CPU e RAMAd esempio, eseguire contemporaneamente tre backup di grandi dimensioni, una reindicizzazione del database e uno script di analisi dei log è quasi una garanzia che il server rallenterà .
Se le attività implicano la creazione di reti (copie remote, sincronizzazioni con rclone(trasmissioni di dati di massa), è possibile generare sovraccarico di larghezza di banda, aumento della latenza e pingche influiscono sugli altri servizi che dipendono dalla connessione.
C'è anche il rischio di conflitti di attività Due script che agiscono simultaneamente sullo stesso file o database con operazioni diverse possono causare il danneggiamento dei dati o strani errori difficili da diagnosticare.
Per limitare l'impatto, è possibile utilizzare strumenti come bello per ridurre la priorità della CPU di un lavoro, o cpulimit per limitare la percentuale massima di CPU che un processo può consumare:
- Bassa priorità della CPU:
0 19 * * * usuario nice -n 19 /ruta/script.sh - Limita la CPU al 50%:
0 19 * * * usuario cpulimit -l 50 /ruta/script.sh
Utilizzo di Crontab per attività di routine: backup, pulizia e monitoraggio
Uno dei grandi vantaggi di Cron è che ti consente di automatizzare la "manutenzione" della tua macchina quasi senza sforzo, migliorando le prestazioni nel medio termine e risparmiando tempo.
Un uso molto tipico è pulire periodicamente i file temporanei, le cache e le directory vuoteUtilizzando uno script che elimina i file vecchi o vuoti in determinati percorsi, è possibile liberare spazio e ridurre la frammentazione del file system.
Un altro schema utile è pianificare gli aggiornamenti del sistema e delle applicazioni durante le ore non di punta. Ad esempio, un lavoro notturno che inizia apt update && apt upgrade (o l'equivalente nella tua distribuzione) consente di aggiornare il sistema senza interrompere il lavoro quotidiano.
È anche possibile automatizzare il chiusura delle applicazioni inattive da troppo tempoLiberare memoria per altri processi. Negli ambienti desktop o server applicativi, questo può fare una differenza significativa.
E, naturalmente, Cron è perfetto per script di monitoraggio e registrazioneRegistrare regolarmente CPU, RAM, utilizzo del disco, latenza di rete, ecc., archiviare i dati nei file di registro e quindi analizzare le tendenze per individuare i colli di bottiglia prima che diventino incidenti gravi.
Svantaggi e limiti di Cron e Crontab
Sebbene Cron sia uno strumento estremamente potente, non è la soluzione perfetta per tutto. Ha Limitazioni che vale la pena conoscere per non spingerlo oltre ciò che offre.
Da un lato c'è il curva di apprendimentoSe si proviene da ambienti o sistemi più grafici come Windows, all'inizio potrebbe essere intimidatorio scrivere espressioni cron a mano e lavorare senza un'interfaccia visiva.
D'altra parte, Cron è strettamente legato all'ecosistema Unix/Linux. Ciò che imparerai sarà utile su molti server e sistemi simili, ma Non potrai utilizzarlo così com'è su Windows o macOS (che ha i suoi meccanismi).
Per quanto riguarda la sicurezza, se I file di configurazione cron non sono ben protettiPossono rappresentare un punto di accesso per esecuzioni dannose. Consentire a qualsiasi utente di programmare senza controllo apre le porte a problemi.
Inoltre, Cron Non è l'ideale per attività molto complesse o con molte dipendenze.Non gestisce il flusso di errori in modo avanzato, non può ripetere l'operazione con logica condizionale e non si integra nativamente con i sistemi distribuiti. Per questo, esistono scheduler più sofisticati o timer proprietari di systemd.
Inoltre tienilo a mente crontab offre solo un'accuratezza di un minutoSe hai bisogno di qualcosa che venga eseguito più volte al secondo o a intervalli inferiori a un minuto, dovrai utilizzare altri strumenti o cicli di programma all'interno dello script stesso.
Alternative a Cron e Crontab: Anacron, Fcron, hcron, Mcron e altri
In alcuni scenari, Cron non è la soluzione ideale. Ad esempio, se si dispone di un laptop o di un server che non è sempre acceso, I lavori programmati per un orario specifico possono essere "persi" se l'apparecchiatura è spenta in quel momento.
Per coprire tali casi, esistono alternative come Anacron, che è progettato per eseguire attività periodiche senza richiedere che la macchina sia sempre accesaSe il computer era spento quando era necessario eseguire un'attività , Anacron la avvierà il prima possibile dopo l'avvio.
Fcron È un'altra opzione interessante. Non richiede che il sistema sia costantemente attivo; può funzionare con date e orari specificie offre maggiore flessibilità a costo di richiedere l'installazione manuale su molte distribuzioni.
hcron Fa un ulteriore passo avanti, consentendo l'uso di Etichette per organizzare i lavori, gestire le reti delle macchine e migliorare la sicurezzaNon è molto diffuso, ma può adattarsi bene agli ambienti in cui è richiesta un'amministrazione centralizzata.
McCon (basato su Guile) differisce in quanto si basa su un linguaggio di programmazione completo per definire la pianificazione delle attività , conferendogli un enorme potere quando si tratta di ridefinire i lavori, creare dipendenze e gestire logiche complesse.
In Windows vengono invece utilizzate soluzioni come Cron. WinCron, VisualCron o Advanced Task Schedulerche forniscono interfacce grafiche intuitive e funzionalità comparabili, sebbene integrate con l'ecosistema Microsoft.
Cron e Crontab in ambienti aziendali
Nelle aziende di tutte le dimensioni, Cron e Crontab fanno parte del "collante" che mantiene i sistemi in funzione. Permettono automatizzare i processi ripetitivi e critici senza un costante intervento umano, riducendo il rischio di guasti e liberando tempo per gli amministratori.
Tra gli usi aziendali più comuni ci sono: Backup programmati, aggiornamenti software, generazione periodica di report, attività di manutenzione del database e pulizia dei registriGrazie alla granularità della sintassi, è possibile ottimizzare il momento in cui vengono eseguite le azioni per ridurne al minimo l'impatto.
Inoltre, queste automazioni hanno un effetto diretto su efficienza e produttività I dipendenti non devono ricordarsi di avviare processi di routine, gli errori umani vengono ridotti e le finestre di basso carico vengono sfruttate meglio per eseguire operazioni pesanti.
Tuttavia, negli ambienti aziendali è consigliabile Documentare accuratamente tutti i lavori pianificati, mantenere backup dei crontab e verificare periodicamente che quanto definito abbia ancora senso.Nel tempo, è facile accumulare attività obsolete che continuano a consumare risorse senza apportare alcun contributo.
Alla fine, Cron e Crontab diventano una specie di "programmazione automatica" del sistemaSe utilizzati con saggezza, diventano indispensabili sia nei server di piccole dimensioni che nelle grandi infrastrutture con molte macchine e consentono di mantenere una solida base su cui costruire altri strumenti di orchestrazione o monitoraggio più avanzati.
Alla luce di tutto quanto sopra, è chiaro che La pianificazione delle attività in Linux con Crontab rimane uno dei modi più semplici e potenti per automatizzare il tuo sistemaCon poche righe ben scritte, è possibile gestire backup, pulizie, aggiornamenti, monitoraggio e processi aziendali senza toccare un pulsante, a patto di rispettarne i limiti, gestire le autorizzazioni, controllare l'ambiente e pianificare in modo sensato l'impatto su prestazioni e sicurezza.