Crontab Linux

Crontab Linux è l’abbreviazione di cron table ed è un elenco di comandi necessari a generare una pianificazione atta all’esecuzione di script e procedure ad orari, giorni del mese e giorni della settimana prestabiliti nel tempo senza la necessità che un sistemista o un programmatore li eseguano manualmente sul computer o server.

Crontab Linux è legato al demone cron prendendo il nome proprio dal dio del tempo greco Kronos e può essere facilmente controllato da terminale consenteCrontab Linux - IT Blog - Blog I.T.ndo di aggiungere, rimuovere o modificare qualsiasi attività pianificata.

La sintassi del comando crontab è semplice ed è solitamente legata all’utente che ha aperto il terminale, anche se i sistemisti preferiscono utilizzarlo aprendo il terminale come utente amministrativo Linux e cioè “root” oppure anteponendo il comando “sudo” (sintassi Ubuntu)

La metodica utilizzata per richiamare il crontab Linux è la seguente:

crontab

sudo crontab

crontab [ -u utente ] del file

crontab [ -u utente ] [ -l | -r | -e ] [ -i ] [ -s ]

E’ necessario spiegare le varie opzioni insite in questo potente comando, in quanto spesso vengono dimenticate con il passare del tempo.

file
Carica i dati crontab dal file specificato e se il file è un trattino (” – “), i dati crontab vengono letti dallo standard input .

-u nome utente
Specifica l’utente con cui crontab deve essere visualizzato o modificato e se questa opzione non viene fornita, crontab Linux apre quello dell’utente che ha eseguito il comando e quindi aperto il terminale.

Consigliamo sempre di non eseguire il crontab Linux dallo user “su”, in quanto potrebbero avvenire errori imprevisti ed è sempre preferibile o aprire il terminale e quindi entrare con l’utente che dovrà effettuare le operazioni pianificate, oppure utilizzare semplicemente l’opzione “-u” seguito dal nome dell’utente

-l
Visualizza tutte le operazioni che sono state inserite nel crontab di quell’utente, permettendoci di deciderne eventuali modifiche o rimozioni.

-r
Con il comando crontab -r abbiamo la possibilità di rimuovere completamente tutto ciò che abbiamo pianificato ed è un’opzione molto potente ed il consiglio rimane sempre quello di verificare due volte ciò che si è scritto, in quanto non è possibile tornare indietro sui propri passi.

-e
Permette di modificare l’editor che preferiamo utilizzare con il crontab Linux ed un esempio ve lo forniamo subito sotto:

Select an editor. To change later, run ‘select-editor’.
1. /bin/ed
2. /bin/nano <—- easiest
3. /usr/bin/code
4. /usr/bin/vim.tiny

Choose 1-4 [2]: 2
crontab: installing new crontab

Con l’opzione crontab -e, qualora avessimo compiuto una scelta sbagliata alla prima esecuzione del comando, avremo la possibilità di rimediare.

-io
E’ un’opzione poco usata ed è identica a -r ma fornisce all’utente la possibilità di confermare con un Y/N prima di rimuovere tutto il contenuto del crontab stesso.

Non spiegheremo l’utilizzo dell’opzione -s (SeLinux), in quanto non attiva di default nei sistemi Ubuntu/Debian per la presenza di AppArmor e quindi, caduta quasi completamente in disuso

Dato che i sistemi operativi moderni sono multi utente e cioè danno la possibilità a più persone di lavorare sulla stessa macchina (contemporaneamente se da remoto) singolarmente , potendo generare uno spazio di lavoro personalizzato, ovviamente, ogni utente ha la possibilità di programmarsi il suo crontab Linux personale e lanciare le varie procedure pianificandole secondo le proprie esigenze.

Il file generato dal comando crontab, si trova solitamente in /var/spool/cron e non può essere modificato direttamente se non passando per il crontab stesso, oppure l’utente root, potrà avvalersi dei suoi poteri di amministratore e scendere ulteriormente di livello digitando cd crontabs e visualizzerà all’interno di questa sotto directory, i nomi di tutti gli utenti presenti sulla macchina, che hanno generato un file crontab ed agendo singolarmente su uno di quelli presenti con un editor, avrà la possibilità di effettuare eventuali modifiche senza la necessità di conoscere le corrette credenziali dell’utente che l’ha generato.

Ogni voce del comando cron nel file crontab ha cinque campi che sono l’ora e la data e vi è un sesto campo contenente l’indicazione dello script o il comando stesso da eseguire come pianificato ed il demone cron, controllando il crontab ogni minuto, consente nel momento corrispondente, l’attivazione della procedura richiesta.

I vari campi vengono indicati nel seguente modo, tenendo presente che dove è presente un solo simbolo numerico, per convenzione è preferibile precederlo con uno zero, laddove invece è presente uno zero singolo, scriveremo un doppio zero ” 00 “

minuti 00 – 59
ore  00 – 23
giorno del mese 01 – 31
mese 01 – 12  come anche possiamo scrivere il nome del mese abbreviato, sul tipo di jan, may, dec, jul e così via
giorno della settimana 00 – 07  oppure come per i mesi, potremo scrivere semplicemente mon, sun, tue e così via

In ogni campo potrà essere impostato un asterisco ( * ), che significa ogni giorno, ogni mese, ogni ora, ogni minuto etc etc

Possono essere utilizzati numeri ed intervalli separandoli con un trattino come ad esempio, 6-9 per una voce “ore” indicherà l’esecuzione alle ore 6, 7, 8 e 9.

E’ anche possibile utilizzare delle liste e cioè che un insieme di numeri o intervalli separati da virgole tipo ” 1,2,7,10 ” oppure ” 2-6,9-15 “.

I valori Step possono essere usati insieme ai range laddove per esempio ” 00-23 / 2 ” nel campo ore significa “ogni mezz’ora”.

Dopo un’asterisco, se vogliamo  che una procedura si attivi ogni due ore,  potremo scrivere “ * / 2

Se entrambi i campi sono limitati (in altre parole, non sono * ), il comando verrà eseguito quando uno dei due campi corrisponderà all’ora corrente. Ad esempio, ” 30 4 1,15 * 5 ” causerebbe l’esecuzione di un comando alle 4:30 del 1 ° e del 15 di ogni mese, più ogni venerdì.

Un altro errore comune è quello di inserire caratteri ” % ” nel comando da eseguire senza il  relativo escape, in quanto il carattere ” % ” significa una nuova linea.

# Errore 1 2 3 4 5 touch ~/errore_`date “+%Y%m%d”`.txt
# Corretto 1 2 3 4 5 touch ~/corretto_`date +\%Y\%m\%d`.txt

E’ importantissimo dopo l’ultima riga non inserire assolutamente un invio (Return) in quanto altrimenti, quest’ultima riga non verrà considerata e la procedura richiesta in quest’ultima non potrà essere eseguita.

Qualora fosse nostro desiderio isolare o per meglio dire, commentare una riga in modo che non venga più utilizzata, pur conservandola per futuri reinserimenti o solo per esempio, sarà sufficiente precedere il campo dei minuti e cioè il primo, con un ” # ” .

Con il crontab Linux, è possibile utilizzare delle variabili d’ambiente a seconda della distribuzione utilizzata.

I lavori cron possono essere consentiti o non consentiti per i singoli utenti, come definito nei file /etc/cron.allow e /etc/cron.deny e se cron.allow esiste, un utente deve essere elencato lì per poter utilizzare un determinato comando.

Se il file cron.allow non esiste ma il file cron.deny è presente, allora un utente non deve essere elencato lì per usare un dato comando.

Nel caso nessuno di questi file esiste, solo l’utente amministrativo ” root ” sarà in grado di utilizzare un determinato comando.

E’ importante ricordare che ogni volta che viene eseguita una procedura e quindi una riga del crontab Linux, viene inviata una email ed eventuali operazioni vengono riportate a video; per impedire che ciò avvenga, bisognerà semplicemente aggiungere ” >/dev/null 2>&1 ” in fondo alla riga.

Crontab Linux - IT Blog - Blog I.T.