Salta al contenuto principale

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_eseguire

I 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.php

Una 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.php

crontab -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

  1. Eseguire uno script PHP ogni 5 minuti:
     

    */5 * * * * /usr/bin/php /var/www/progetto/cron.php >/dev/null 2>&1

    Nota: >/dev/null 2>&1 serve a sopprimere l'output del comando, evitando che il sistema ti invii un'email ad ogni esecuzione.

  2. Svuotare una cartella di log ogni domenica alle 4 del mattino:
     

    0 4 * * 0 rm -f /var/log/app_logs/*.log
  3. Lanciare 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/php invece di php).
  • Permessi: Assicurati che lo script o il file che stai cercando di eseguire abbia i permessi di esecuzione (chmod +x nome_script.sh).

4. Come posso usare un editor diverso per `crontab -e`?

Puoi impostare la variabile d'ambiente EDITOR prima di lanciare il comando. Ad esempio, per usare nano: export EDITOR=nano; crontab -e.

Aggiungi un commento

Comment

  • Elementi HTML permessi: <br> <p> <code class="language-*"> <pre>
  • Linee e paragrafi vanno a capo automaticamente.
  • Solo le immagini ospitate su questo sito possono essere utilizzate nel tag <img>.