Cos'è cron
cron è il pianificatore di attività storico dei sistemi Unix e Linux: un servizio in background che controlla periodicamente se è arrivato il momento di eseguire un comando o uno script programmato, secondo un orario ricorrente definito dall'utente. È lo strumento più diffuso per automatizzare backup notturni, pulizia di file temporanei, invio di report periodici o qualsiasi altro compito che deve ripetersi a intervalli regolari senza intervento manuale.
La sintassi del crontab
Ogni utente ha il proprio elenco di pianificazioni, modificabile con il comando crontab -e. Ogni riga rappresenta un'attività pianificata, con cinque campi che indicano rispettivamente minuto, ora, giorno del mese, mese e giorno della settimana, seguiti dal comando da eseguire. Un asterisco in un campo significa "ogni valore possibile": la riga 0 3 * * * /home/utente/backup.sh esegue lo script alle 3:00 del mattino, tutti i giorni, di ogni mese, indipendentemente dal giorno della settimana.
Intervalli e giorni specifici
Oltre al singolo valore fisso, i campi supportano intervalli e liste: */15 nel campo dei minuti significa "ogni 15 minuti", mentre 1-5 nel campo del giorno della settimana indica "dal lunedì al venerdì" (dove 0 e 7 rappresentano entrambi la domenica). Combinando questi elementi si possono costruire pianificazioni piuttosto precise, ad esempio 30 8 * * 1-5 per eseguire un'attività alle 8:30 solo nei giorni lavorativi.
Un errore comune: il PATH incompleto
Uno dei problemi più frequenti con cron è che uno script funziona perfettamente se lanciato manualmente da terminale, ma fallisce silenziosamente quando eseguito da cron: la causa quasi sempre è che cron esegue i comandi con un ambiente e un PATH molto più ridotto rispetto a una sessione di shell interattiva. La soluzione più affidabile è usare sempre percorsi assoluti sia per il comando da eseguire sia per qualsiasi file a cui lo script fa riferimento, invece di affidarsi a comandi disponibili solo perché presenti nel PATH della propria shell abituale.
Verificare che un task sia andato a buon fine
Per impostazione predefinita, l'output di un comando eseguito da cron viene inviato via email all'utente locale del sistema (se un sistema di posta è configurato) invece di essere semplicemente visibile a schermo, dato che non c'è un terminale interattivo ad osservarlo. In pratica, per task importanti, è buona norma far scrivere allo script stesso un log dettagliato su file (ad esempio ridirigendo l'output con >> /var/log/backup.log 2>&1 nella riga di crontab), così da poter verificare in qualsiasi momento se e come l'attività pianificata è stata eseguita.