Cloud with rain
.:G
G:.
0 and 1 serie, black on white
pulled card
myjsp.feelinglinux.com
ver. 1.1.9-4
Hallo, welcome to my world.
Here you can find some stuff about computer science.
<<< Enjoy your visit! >>>
0 and 1 serie, white on black

Cron, crontab: funzionamento

          Scritto: Giansante Gabriele, 24/12/2001      Aggiornato: 04/02/2017     

A volte sorge la necessita' di eseguire un comando, uno script o un programma ad intervalli regolari di tempo, un mese, un'ora, un giorno, una settimana o altri. Un meccanismo sempre presente in Linux e' rappresentato dal demone cron.
Si tratta di un programma che gira in background e, ad intervalli regolari, esegue dei compiti ben precisi. Normalmente non bisogna installarlo in quanto gia' attivo nel proprio sistem (consideriamo una distribuzione Linux RedHat).

Vediamo come funziona.
Cron viene attivato ogni minuto e legge degli opportuni file di configurazione dove vengono specificate le operazioni da compiere e gli intervalli relativi. Se trova qualcosa da eseguire nel minuto in cui si e' attivato, allora procede all'operazione. Tutto cio' che viene scritto sullo standard output, viene inviato via email al proprietario del cron, tipicamente "root".
Cron non deve essere riavviato per ogni modifica.

Ci sono tre modi diversi di specificare operazioni ed intervalli.

Primo modo

La via piu' semplice e' la creazione di uno script (sh, bash, perl o altro) che esegue cio' che vogliamo. Tale script andra' inserito in una delle directory seguenti
/etc/cron.daily
/etc/cron.hourly
/etc/cron.monthly
/etc/cron.weekly
per poter essere eseguito ad intervalli ben definiti (rispettivamente un giorno, un'ora, un mese e una settimana). E' possibile anche mantenere tutti gli script in una directory standard (ad esempio "/scripts") e poi creare un soft link ( Manpage of LN (1) , "ln -s") in una di quelle sopra elencate.
I cron giornalieri, mensili e settimanali di solito vengono eseguiti alle 4:00 (piena notte!).

Secondo modo

Per intervalli di tempo diversi da quelli standard, e' possibile usare la directory
/etc/cron.d
oppure il file
/etc/crontab
In cron.d possono essere inseriti file con formato particolare (lo stesso di crontab), indicanti operazioni ed intervalli di tempo piccoli anche solo minuto.

Formato: possono essere inseriti in ogni file
  • commenti
  • linee vuote
  • assegnazioni di variabili di ambiente
  • comandi cron (i commenti non sono ammessi sulla stessa linea di un comando cron)
Andiamo con ordine. I commenti sono linee che iniziano con il simbolo "#" e come le linee vuote vengono ignorati.

Per quanto riguarda le variabili di ambiente, fra le possibili utilizzabili vi sono
  • SHELL, ovvero la shell da usare per l'esecuzione dei comandi
  • PATH, ovvero il path dove cercare i comandi indicati
  • MAILTO, ovvero a chi mandare via email l'output dei comandi. L'email viene inviata anche se questa variabile non viene settata
Una tecnica comunemente usata per evitare l'invio della mail, o evitare la scrittura del risultato dell'operazione sulla mail che viene inviata, e' la redirezione dell'output sul dispositivo "/dev/null" (es. "/prova/test.sh>/dev/null").

I comandi cron rappresentano la parte piu' complessa della configurazione.
Il formato di un comando cron e' il seguente:
s1 s2 s3 s4 s5 Proprietario Comando
Comando e' un comando da eseguire (con i relativi parametri ed eventuali redirezioni di output).
Proprietario indica a chi appartiene il comando cron (es. root o altri utenti).
s1, s2, s3, s4, s5 sono stringhe che specificano l'intervallo di esecuzione. Ognuna di queste stringhe puo' contenere il carattere "*" per indicare tutti i valori possibili.

"s1" rappresenta i minuti. I valori permessi vanno da 0 a 59. E' possibile specificare anche intervalli (piu' avanti spiegati brevemente).
"s2" rappresenta le ore. I valori permessi vanno da 0 a 23. E' possibile specificare anche intervalli (piu' avanti spiegati brevemente).
"s3" rappresenta i giorni all'interno di un mese. I valori permessi vanno da 1 a 31. E' possibile specificare anche intervalli (piu' avanti spiegati brevemente).
"s4" rappresenta i mesi. I valori permessi vanno da 1 a 12 (piu' i nomi in lettere). E' possibile specificare anche intervalli (piu' avanti spiegati brevemente).
"s5" rappresenta i giorni della settimana. I valori permessi vanno da 0 a 7 (piu' i nomi in lettere, 0 e 7 rappresentano entrambi la Domenica). E' possibile specificare anche intervalli (piu' avanti spiegati brevemente).

Tutte e cinque le stringhe possono rappresentare un numero, tutti i valori oppure un intervallo.
Specificando un numero, si indica un momento preciso. Ad esempio, mettere 2 in s4, significa eseguire a Febbraio (vanno considerate poi anche tutte le altre 4 stringhe).
Se il particolare campo non interessa, cioe' non e' utile alla definizione del tempo di attivazione, puo' essere usato l'asterisco ("*") per indicare tutti i valori.
Molto spesso, pero' quello che serve e' un certo intervallo e non un momento unico e preciso. Per esempio, potremmo volere eseguire un comando ogni 2 minuti invece che sempre e solo nel secondo minuto. In questo caso, possiamo scrivere le cinque stringhe (o solo una parte di esse) sotto forma di intervallo. Vediamone qualche formato (non tutti potrebbero essere supportati su tutti i sistemi):
  • */n indica ogni "n". Esempio, "*/2" indica ogni 2.
  • n1-n2 indica da n1 a n2. Esempio, "5-8" indica 5,6,7,8.
  • n1-n2/n3 indica ogni n3 all'interno del range n1-n2. Esempio, 3-21/6 indica 3,9,15,21 (ongi 6 nel range 3-21).
  • n1,n2,... indica i numeri specificati. Esempio, 4,7,8 indica tutti i numeri scritti.
  • n1-n2,n3-n4 indica da n1 a n2 e da n3 a n4. Esempio, 3-5,7-9 indica 3,4,5,7,8,9.
Sono possibili anche altre combinazioni, facilmente intuibili.
Qualche esempio (non far caso ai comandi inseriti):
   # Esegue il comando indicato ogni cinque minuti, solo il 15 di ogni mese,
   # con proprietario "root"
   */5 * 15 * * root /bin/ls /var/log>/temp/ls.out

   # Manda una mail con il testo indicato ogni giorno alle 8:00 di mattina, 
   # con proprietario "root". Se MAILTO vale "root" allora la mail arriva a root.
   0 8 * * * root echo "Buongiorno!!!"

   #Esegue ogni minuto!!! Il proprietario e' "pippo".
   * * * * * pippo /usr/bin/gimp

Pubblicita'
Terzo modo

Un utente diverso da root, per usare dei propri comandi cron personalizzati, puo' inserirli in
/var/spool/cron
Il file non dovrebbe essere editato direttamente (e di solito non puo' esserlo da parte di un utente diverso da root) in quanto viene gestito dal comando /usr/bin/crontab.

L'idea e' che venga mantenuto un file master con i cron di un utente.
La sintassi di questo file e' la stessa vista per "/etc/cronttab". Il file master puo' risiedere ovunque nel filesystem.
Con l'installazione, crontab ne copia il contenuto all'interno del file "/var/spool/cron/nomeutente".
Sempre con crontab ("man crontab") e' possibile rimuovere i cron installati.
La politica per cui un utente puo' usare il comando "crontab" e' regolata dai file
/etc/cron.allow
/etc/cron.deny
Per illustrare come usare le funzionalita' di questo terzo tipo, supponiamo di usare come "cavia" l'utente "pippo" con home directory "/home/pippo". Creiamo il file "/home/pippo/prova.cron" con il seguente contenuto:
   # /home/pippo/prova.cron
   # Test di utilizzo di crontab
   
   MAILTO=pippo@localhost
   * * * * * pippo echo "ciao pippo"
Questo cron setta la mail per inviare l'output a pippo e scrive il messaggio "ciao pippo" ogni minuto.
Per installare il contenuto del file indicato, eseguire
/usr/bin/crontab -u pippo /home/pippo/prova.cron
se si sta lavorando come utente root, oppure
/usr/bin/crontab /home/pippo/prova.cron
se si sta lavorando come utente "pippo".

Si notera' la comparsa del file "/var/spool/cron/pippo" (se non esisteva) con il seguente contenuto (o simile):
   # DO NOT EDIT THIS FILE - edit the master and reinstall.
   # (/home/pippo/prova.cron installed on Mon Dec 24 15:27:23 2001)
   # (Cron version -- $Id: cron.jsp,v 1.2 2017/02/10 01:38:42 gabriele Exp $)
   MAILTO=pippo@localhost
   * * * * * pippo echo "ciao pippo"
Evidente e' l'avvertimento di non modificare questo file, ma il master "/prova/prova.cron".
ATTENZIONE! L'installazione dei cron di un utente, sovrascrive i cron eventualmente gia' presenti per l'utente stesso.
Per aggiungere comandi cron senza eliminare quelli precedenti, e senza inserirli prima nel master, usare
/usr/bin/crontab -u pippo -e
se si sta lavorando come utente root, oppure
/usr/bin/crontab -e
se si sta lavorando come utente "pippo".

Si aprira' l'editor "vi" con i comandi gia' presenti e ci sara' la possibilita' di inserirne di nuovi oppure di modificare, oltre che eliminare, quelli esistenti. Tutto cio' non tocca il file master ma solo il file "/var/spool/cron/pippo", evitando la procedura di reinstallazione.
Tipicamente si edita il file master e lo si reinstalla, in modo da evitare di perdere le modifiche inserite con "-e".

Per eliminare i cron inseriti, usare
/usr/bin/crontab -u pippo -r
se si sta lavorando come utente root, oppure
/usr/bin/crontab -r
se si sta lavorando come utente "pippo".


Per ulteriori informazioni, leggere il manuale: Manpage of CRON (8) , Manpage of CRONTAB (1) , Manpage of CRONTAB (5) .

Hai trovato utile questo articolo?
Aiutami a condividerlo o metti un "mi piace".
Grazie mille!


Gli strumenti di condivisione (Google+, Facebook) sono visibili in alto a destra solo dopo aver accettato la policy di utilizzo dei cookie per questo sito.
FAQ - Come faccio a cambiare la mia scelta?

 

Strumenti (myjsp.feelinglinux.com)
Gioco: allenamento con la tastiera Strumenti di codifica/decodifica URI (%-encoding) e Base64 Strumenti di calcolo online per IP e Reti
QUIZ GAME
Quiz game

Cerca @myjsp.feelinglinux.com

Pubblicita'