Cron e Crontab: La Guida Pratica per Automatizzare Task su Linux
Nel mondo dello sviluppo e dell'amministrazione di sistema, la parola d'ordine è una: automazione. Immagina di dover eseguire un backup del database ogni notte, inviare un report via email ogni lunedì mattina o pulire file temporanei ogni ora. Eseguire queste operazioni manualmente non è solo noioso, ma è anche un'enorme perdita di tempo e una potenziale fonte di errori. Qui entra in gioco Cron.
Cron è una delle utility più potenti e affidabili presenti in quasi tutti i sistemi operativi Unix-like (come Linux). È il "pilota automatico" che ti permette di "schedulare", ovvero pianificare, l'esecuzione di comandi o script a intervalli di tempo precisi. In questa guida pratica, ti mostreremo tutto ciò che devi sapere per padroneggiare cron e il suo inseparabile compagno, il comando crontab.
Cron vs Crontab: Facciamo Chiarezza
Prima di iniziare, è fondamentale chiarire una confusione comune. Anche se spesso usati come sinonimi, cron e crontab non sono la stessa cosa.
1. Cron: Il Motore Silenzioso dell'Automazione
Cron è un demone, ovvero un programma che gira costantemente in background sul tuo sistema. Il suo unico scopo è controllare, minuto dopo minuto, una lista di attività pianificate e lanciare quelle per cui è scoccata l'ora. Non interagisci mai direttamente con il demone cron; lui fa il suo lavoro silenziosamente.
2. Crontab: Il Tuo Pannello di Controllo
Crontab (che sta per "Cron Table") è il comando che usi per interagire con il demone cron. Attraverso crontab, puoi visualizzare, creare, modificare o cancellare la lista di attività (chiamate "cron jobs") che il demone cron dovrà eseguire. Ogni utente del sistema può avere il proprio file crontab personale.
La Sintassi di Crontab: Imparare a Parlare con Cron
La vera potenza di cron risiede nella sua sintassi, che ti permette di definire con precisione chirurgica quando un comando deve essere eseguito. Un cron job è una singola riga di testo con questa struttura:
* * * * * /percorso/del/comando da_eseguireI cinque asterischi iniziali rappresentano l'unità di tempo e sono il cuore della pianificazione. Vediamoli in dettaglio:
- Minuto (0 - 59)
- Ora (0 - 23)
- Giorno del Mese (1 - 31)
- Mese (1 - 12)
- Giorno della Settimana (0 - 7, dove sia 0 che 7 rappresentano la Domenica)
Uso dell'asterisco *
Un asterisco (*) in una posizione significa "ogni". Ad esempio, * * * * * significa "ogni minuto di ogni ora di ogni giorno...".
Ecco alcuni esempi per chiarire:
0 2 * * *- Esegui ogni notte alle 02:00.0 9-18 * * 1-5- Esegui ogni ora, dalle 9:00 alle 18:00, dal lunedì al venerdì.*/15 * * * *- Esegui ogni 15 minuti.
Uso della virgola ,
Una virgola (,) in una posizione significa "e", inteso come un operatore "and". Ad esempio, * 2,4 * * * significa "Esegui ogni notte alle 02:00 e alle 4:00".
Ecco alcuni esempi per chiarire:
0 2,4 * * *- Esegui ogni notte alle 02:00 e alle 4:00.0 9,18 * * 1-5- Esegui ogni ora, alle 9:00 e alle 18:00, dal Lunedì al Venerdì.11,41 * * * *- Esegui ogni ora ai minuti 11 e 41.
Uso della barra /
Una barra (/) in una posizione significa "ogni". Ad esempio, * */2 * * * significa "Esegui due ore, ovvero alle 00:00, alle 02:00, alle 4:00, e così via".
Ecco alcuni esempi per chiarire:
0 * */2 * *- Esegui ogni giorno pari del mese.0 */12 * * 7- Esegui ogni 12 ore la Domenica.*/30 * * * *- Esegui ogni 30 minuti.
Per testare e validare le tue regole prima di salvarle, ti consigliamo di usare uno strumento online. Fra i miei preferiti:
Guida ai Comandi Crontab Essenziali
Interagire con crontab dal terminale è semplice. I comandi che userai il 99% delle volte sono tre.
crontab -e: Creare e Modificare i Tuoi Cron Job
Questo è il comando principale. Apre il file crontab dell'utente corrente in un editor di testo (solitamente `nano` o `vi`). Qui puoi aggiungere, modificare o rimuovere le tue righe di pianificazione.
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
# Esempio: aggiungi questa riga per eseguire uno script di backup ogni notte alle 3:30
30 3 * * * /usr/bin/php /var/www/html/backup.phpUna volta salvato e chiuso il file, il demone cron caricherà automaticamente le nuove regole.
crontab -l: Visualizzare i Job Attivi
Questo comando serve semplicemente a mostrare il contenuto del tuo file crontab, senza aprirlo in modalità di modifica. È utile per un rapido controllo.
$ crontab -l
# Output:
# 30 3 * * * /usr/bin/php /var/www/html/backup.phpcrontab -r: Rimuovere Tutti i Job (Attenzione!)
Usa questo comando con estrema cautela! crontab -r rimuove istantaneamente e senza chiedere conferma l'intero file crontab, cancellando tutti i tuoi job pianificati. Non c'è un cestino o un modo semplice per annullare l'operazione.
Esempi Pratici di Cron Job
Eseguire uno script PHP ogni 5 minuti:
*/5 * * * * /usr/bin/php /var/www/progetto/cron.php >/dev/null 2>&1Nota:
>/dev/null 2>&1serve a sopprimere l'output del comando, evitando che il sistema ti invii un'email ad ogni esecuzione.Svuotare una cartella di log ogni domenica alle 4 del mattino:
0 4 * * 0 rm -f /var/log/app_logs/*.logLanciare un comando di un framework (es. Laravel Artisan) ogni ora:
0 * * * * cd /var/www/laravel_app && php artisan schedule:run >> /dev/null 2>&1
Hai Bisogno di Automazioni Complesse?
Questi esempi coprono le basi, ma le possibilità di cron sono infinite. Se hai bisogno di configurare pipeline di automazione complesse, gestire i permessi di esecuzione o assicurarti che i tuoi job critici funzionino sempre senza errori, potresti aver bisogno di un aiuto esperto.
Il nostro servizio di assistenza Linux è pensato proprio per questo. Lascia che i nostri sistemisti esperti gestiscano le tue automazioni, così puoi concentrarti sullo sviluppo del tuo business.
Domande Frequenti (FAQ) su Cron
1. Esiste un'alternativa a cron per Windows?
Sì. L'equivalente di cron in ambiente Windows si chiama Utilità di pianificazione (Task Scheduler). Permette di pianificare l'avvio di programmi o script con un'interfaccia grafica.
2. Come posso vedere l'output o gli errori di un cron job?
Per impostazione predefinita, cron invia l'output di ogni comando via email all'utente proprietario del crontab. Per un logging più robusto, è buona pratica reindirizzare l'output su un file di log specifico. Esempio:
* * * * * /mio/comando >> /var/log/mio_cron.log 2>&1.3. Perché il mio cron job non funziona?
Le cause più comuni sono:
- Percorsi non assoluti: Cron non ha lo stesso ambiente (PATH) di un utente loggato. Usa sempre percorsi assoluti per i comandi (es.
/usr/bin/phpinvece diphp). - Permessi: Assicurati che lo script o il file che stai cercando di eseguire abbia i permessi di esecuzione (
chmod +x nome_script.sh).
- Percorsi non assoluti: Cron non ha lo stesso ambiente (PATH) di un utente loggato. Usa sempre percorsi assoluti per i comandi (es.
4. Come posso usare un editor diverso per `crontab -e`?
Puoi impostare la variabile d'ambiente
EDITORprima di lanciare il comando. Ad esempio, per usarenano:export EDITOR=nano; crontab -e.