crontab

Schedulazione lavori: Anacron vs Crontab

schedulazione lavori su linuxAnacron e Crontab sono due ottimi servizi presenti in Linux che permettono di schedulare i lavori.

Sintetizzando al massimo si potrebbe dire che Crontab è l'ideale su macchine che sono sempre accese (ad esempio i server) mentre Anacron è più indicato per PC e Notebook perchè alla riaccensione del PC recupera ed esegue eventuali lavori schedulati in un momento in cui la macchina era spenta. Però se il lavoro da schedulare deve essere eseguito con una frequenza di ore o minuti allora crontab è una scelta obbligata anche su desktop e laptop perchè anacron non gestisce frequenze di schedulazioni inferiori al giorno.

Le principali caratteristiche dei due servizi sono le seguenti:

Crontab

Anacron

La frequenze minima di schedulazione è un minuto

La frequenze minima di schedulazione un giorno

Il lavoro non viene più eseguito se la macchina è spenta fino al ripetersi della condizione richiesta (esempio: se un lavoro è schedulato per ogni domenica alle 12:00, se in quel momento la macchina è spenta, riaccendendola un minuto dopo il lavoro non verrà eseguito fino a domenica prossima).

I lavori vengono schedulati ogni TOT giorni, quindi se al verificarsi dell'evento la macchina è spenta, appena viene riaccesa verrà eseguito il job previsto in quanto ha superato l'intervallo richiesto.

Possono essere schedulati lavori da eseguire anche come utenti normali (non superuser)

I lavori schedulati vengono eseguiti solo come superuser (root)

Schedulazioni a date ed orari ben precisi

Non è possibile indicare un preciso momento di schedulazione

Schedulazioni ripetitive per singoli giorni della settimana o del mese

Schedulazioni ogni TOT giorni

Schedulazioni ogni TOT ore

Schedulazioni ogni TOT minuti

Vediamo in dettaglio come si utilizzano.

Crontab

Linux CrontabOgni utente può schedulare lavori con crontab senza la necessità di essere root.

La gestione di questo servizio avviene utilizzando l'omonimo comando crontab con le relative opzioni:

crontab -l

permette di visualizzare l'elenco dei lavori schedulati dall'utente.

crontab -e

permette di gestire (aggiungere, modificare e eliminare) i lavori schedulati dell'utente.

Per gestire i lavori schedulati di un altro utente è sufficiente utilizzare l'opzione -u:

sudo crontab -u <utente> -e

Ogni lavoro schedulato è descritto da un'istruzione fatta dalle seguenti 6 informazioni:

  • m (minute): minuto di esecuzione comando
  • h (hour): ora di esecuzione comando
  • dom (day of month): giorno del mese di esecuzione comando
  • mon (month): mese di esecuzione comando
  • dow (day of week): giorno della settimana di esecuzione comando. Può assumere il valore da 0 e 7 dove 0 e 7 indicano entrambi domenica, 1=lunedì, 2=martedì, …
  • command: comando o script da eseguire

Per alcuni di questi parametri è possibile indicare un frequenza periodica usando la barra, ad esempio indicando la */40 nella colonna dei minuti significa ogni 40 minuti.

E' possibile anche indicare un elenco di valori o un intervallo di valori. Ad esempio indicando 1,10,20 per la colonna dom (day of month) significa che il comando dev'essere eseguito i giorni 1, 10 e 20 di ogni mese; se invece indico per la stessa colonna il valore 1-5 significa che il comando va eseguito dal giorno 1 al giorno 5 di ogni mese.

Di seguito alcuni esempi che aiutano a capire meglio:

15 */3 * * * <comando o script>

esecuzione ogni 3 ore al minuto 15 (03:15, 06:15, 09:15, 12:15, ...)

*/40 * * * * <comando o script>

esecuzione ogni 40 minuti

40 * * * * <comando o script>

esecuzione al minuto 40 di ogni ora (00:40, 01:40, 02:40, ...)

0 22 1-31/2 * * <comando o script>

esecuzione ogni 2 giorni alle ore 22:00
ATTENZIONE: ricordarsi che, a differenza di anacron, crontab NON recupera eventuali lavori scadenzati quando il computer era spento, quindi in questo specifico caso, se il lavoro viene eseguito il 18 Aprile alle ore 22.00 la successiva esecuzione sarà il 20 Aprile alla stessa ora. Se in quel momento il computer è spento il lavoro ovviamente non viene eseguito. Se il giorno successivo (21 Aprile) alla medesima ora il computer è accesso il lavoro NON verrà eseguito perchè risulterà scadenzato per il 22 Aprile, ovvero 2 giorni dopo alla data in cui avrebbe dovuto essere eseguito.

30 12 1,15 * * <comando o script>

esecuzione mensile alle ore 12:30 dei giorni 1 e 15 di ogni mese

30 23 1-10 * * <comando o script>

esecuzione mensile alle ore 23:30 dei giorni dal 1 al 10 di ogni mese

00 13 1 1,7 * <comando o script>

esecuzione semestrale alle ore 13:00 del giorno 1 dei mesi di Gennaio e Luglio

00 13 * * 1 <comando o script>

esecuzione settimanale alle ore 13:00 di ogni Lunedì

00 13 * * 1,3,5 <comando o script>

esecuzione settimanale alle ore 13:00 di ogni Lunedì, Mercoledì e Venerdì

Anacron

Linux AnacronI lavori da schedulare tramite anacron vanno descritti nel file /etc/anacrontab fornendo le seguenti 4 informazioni:

  • frequenza di esecuzione lavoro espressa in giorni. E' possibile utilizzare anche la costante @monthly per indicare che il lavoro va eseguito con cadenza mensile
  • tempo da attendere prima di eseguire il lavoro dall'accensione del computer. E' espresso in minuti ed è importante per evitare che tutti i lavori schedulati partano contemporaneamente all'avvio del computer sovraccaricando il processore
  • nome univoco di lavoro (a fantasia). ATTENZIONE: DEVE ESSERE UNIVOCO altrimenti il lavoro non viene eseguito
  • comando o lo script da eseguire

Esempi:

7 5 backup_settimanale <comando o script>

in questo caso il lavoro “backup_settimanale” viene eseguito ogni 7 giorni dopo 5 minuti dall'accensione del PC.

@monthly 20 backup_mensile <comando o script>

in questo caso il lavoro “backup_mensile” viene eseguito ogni mese dopo 20 minuti dall'accensione del PC.

E' importante ricordarsi che ANACRON esegue ogni lavoro come superuser (root).

Per riavviare il servizio dopo aver modificato anacrontab va eseguito il comando:

sudo service anacron restart

Le informazioni con la data dell'ultima esecuzione di ogni lavoro, che vengono utilizzati da anacron per capire quali lavori eseguire, sono salvati in file di testo presenti in /var/spool/anacron/. Per ogni lavoro c'è un file omonimo.

Indirizzamento output comandi o script

Se un lavoro genera un output, salvo diversa indicazione, viene inviato di default via e-mail a root.

Per indirizzare l'output di default verso uno specifico indirizzo e-mail è sufficiente valorizzare la variabile MAILTO all'interno di crontab o di anacrontab.

Esempio:

MAILTO = miamail@gmail.com

Invece, per indirizzare l'output di uno specifico lavoro bisogna utilizzare l'operatore “>” alla fine del comando indicando dove indirizzare l'output.

Esempio:

du -s /home/* | sort -nr > zzz.txt 2>/dev/null > Output.log 2>/dev/null

In questo caso l'output standard del comando viene indirizzato verso il file Output.log, inoltre, specificando anche 2>/dev/null eventuali errori o warning generati dal comando vengono cancellati, in caso contrario finirebbero anch'essi nel file Output.log

Potrebbero interessarti anche i seguenti articoli:

(Letto 1.453 volte di cui 1 negli ultimi 30gg)
twitterlinkedinmailby feather

One thought on “Schedulazione lavori: Anacron vs Crontab

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *