Articolo originale: How to Automate Tasks with cron Jobs in Linux

Se ti occupi di tecnologia dell'informazione, potresti avere bisogno di pianificare diverse attività ripetitive come parte dei tuoi processi di automazione.

Per esempio potresti pianificare una certa attività in modo che sia eseguita periodicamente a uno specifico orario del giorno. Questo è utile per eseguire backup giornalieri, archiviazione mensile dei log, eliminazione settimanale di file per creare spazio e così via.

Se Linux è il tuo sistema operativo, userai quello che viene chiamato "cron job" per pianificare un'attività.

Cos'è cron?

Cron è una utilità di pianificazione di attività presente nei sistemi tipo Unix. Il demone crond abilita le funzionalità e viene eseguito in background. Cron legge la crontab (tabella di cron) per eseguire script predefiniti.

Con l'utilizzo di una sintassi specifica puoi configurare un cron job per pianificare degli script o altri comandi affinché vengano eseguiti automaticamente.

Per ciascun utente, il servizio cron verifica il file /var/spool/cron/crontabs/<username>

Content of /var/spool/cron/crontabs
Contenuto della directory /var/spool/cron/crontabs

Cosa sono i cron job in Linux?

Qualsiasi attività che tu pianifichi tramite cron viene detta cron job. I cron job ci aiutano ad automatizzare le nostre attività di routine, siano esse orarie, giornaliere, mensili o annuali.

Vediamo come funzionano i cron job.

Come controllare l'accesso a cron

Per usare i cron job, un amministratore deve fare in modo che essi possano essere aggiunti per gli utenti nel file /etc/cron.allow.

Se esegui il comando crontab -e e ottieni un prompt tipo il seguente, vuol dire che non hai i permessi per usare cron.

Cron job addition denied for user John.
Aggiunta di cron job negata per l'utente john.

Per fare in modo che l'utente con username john possa usare cron, occorre includere il suo username nel file /etc/cron.allow. Questo farà sì che l'utente possa creare e modificare i cron job.

Allowing John in file cron.allow
Aggiungere l'username john al file cron.allow

È anche possibile impedire agli utenti l'accesso ai cron job inserendo i loro username nel file /etc/cron.d/cron.deny.

Come aggiungere cron job in Linux

Innanzitutto, per usare i cron job, devi verificare lo stato del servizio cron. Se cron non è installato, puoi scaricarlo facilmente tramite il gestore di pacchetti della tua distribuzione. Usa questo comando per verificare:

# Verifica del servizio cron su sistema Linux
sudo systemctl status cron.service

Sintassi di crontab

Si utilizza il comando crontab per gestire i cron job con le seguenti opzioni:

  • crontab -e: consente di aggiungere, modificare, cancellare i cron job in tabella.
  • crontab -l: elenca i cron job dell'utente corrente.
  • crontab -u username -l: elenca i cron job dell'utente username (necessario essere root).
  • crontab -u username -e: modifica i cron job dell'utente username (necessario essere root).

Quando elenchi i cron job vedrai qualcosa di simile:

# Cron job example
* * * * * sh /path/to/script.sh

Nell'esempio qui sopra:

  • gli asterischi * * * * * rappresentano rispettivamente minuto(i), ora(e), giorno(i), mese(i), giorno(i) della settimana.
VALORE DESCRIZIONE
Minuti 0-59 Il comando sarà eseguito al minuto specificato.
Ore 0-23 Il comando sarà eseguito all'ora specificata.
Giorni 1-31 Il comando sarà eseguito in questi giorni di ogni mese.
Mesi 1-12 I mesi nei quali saranno eseguite le attività.
Giorni della settimana 0-6 Giorni della settimana nei quali sarà eseguita l'attività. Qui 0 è domenica
  • sh indica che si tratta di uno script bash e dovrebbe esser eseguito da /bin/bash.
  • /path/to/script.sh specifica il percorso dello script.

Di seguito un riassunto della sintassi di un cron job.

*   *   *   *   *  sh /percorso/allo/script/script.sh
|   |   |   |   |              |
|   |   |   |   |      Comando o Script da Eseguire
|   |   |   |   |
|   |   |   |   |
|   |   |   |   |
|   |   |   | Giorno della settimana (0-6)
|   |   |   |
|   |   | Mese dell'anno(1-12)
|   |   |
|   | Giorno del mese(1-31)  
|   |
| Ora(0-23)  
|
Minuto(0-59)

Esempi di cron job

Ecco alcuni esempi di pianificazione di cron job.

PIANIFICAZIONE VALORE PIANIFICATO
5 0 * 8 * Alle 00:05 in Agosto.
5 4 * * 6 Alle 04:05 di Sabato.
0 22 * * 1-5 Alle 22:00 di ogni giorno della settimana, da lunedì a venerdì.

Va bene se non riesci ad afferrare questo tutto in una volta. Puoi esercitarti e generare job pianificati con crontab guru, un sito che offre un editor semplificato per generare cron job.

Come impostare un cron job

In questa sezione daremo un'occhiata a un esempio di come pianificare un semplice script con un cron job.

  1. Crea uno script chiamato date-script.sh che stampa la data e l'ora di sistema e la accoda a un file. Il contenuto dello script è il seguente:
Script for printing date.
Script per accodare data e ora di sistema a un file.

2.  Rendi lo script eseguibile dandogli i permessi di esecuzione:

chmod 775 date-script.sh

3.  Aggiungi lo script alla tabella di crontab usando crontab -e.

In questo caso lo abbiamo pianificato per essere eseguito ogni minuto.

Adding a cron job in crontab every minute.
Aggiungere un cron job in crontab per un'esecuzione ogni minuto.

4.  Verifica il contenuto del file date-out.txt. In base allo script, la data di sistema dovrebbe essere scritta nel file ogni minuto.

Output of our cron job.
Il risultato del nostro cron job

Come risolvere i problemi con i cron job

I cron job sono davvero utili, ma potrebbero non funzionare sempre come previsto. Per fortuna ci sono metodi efficaci che puoi usare per risolvere eventuali problemi.

  1. Verifica la pianificazione

Per prima cosa cerca di verificare la pianificazione impostata per il cron job. Puoi farlo verificando la sintassi che hai visto nelle sezioni precedenti.

2. Verifica i log di cron

Dovresti innanzitutto verificare se il cron job è stato eseguito all'orario prestabilito oppure no. Puoi farlo consultando il file di log var/log/cron, oppure /var/log/syslog, a seconda della distribuzione di Linux, dove sono registrate, tra l'altro, le esecuzioni dei comandi dei cron job.

Se esiste una voce in questo log all'orario corretto, vuol dire che il cron job è stato eseguito come pianificato.

Di seguito, dei log relativi al nostro esempio di cron job. Nota la prima colonna che mostra la marca temporale. Il percorso dello script è registrato alla fine della riga.

Cron job logs
Stampa del log con i cron job evidenziati.

3. Dirottare il risultato del comando di un cron job a un file

Puoi dirottare il risultato del comando di un cron job in un file e verificare questo file per possibili errori.

# Dirotta il risultato del comando eseguito dal cron job a un file
* * * * * sh /path/to/script.sh &> log_file.log

L'automazione delle attività tramite i cron job riduce il lavoro ripetitivo che devi fare. Consente anche alle macchine di curare se stesse e lavorare 24 ora su 24 senza l'intervento umano.

L'automazione in Linux si affida pesantemente ai cron job, quindi dovresti sicuramente imparare a gestirli e sperimentare con essi.

Grazie per avere letto fino in fondo. Un feedback è sempre bene accetto.

Se hai trovato utile questo articolo, condividilo con i tuoi amici.

Connettiamoci su Twitter!