Wiki Ubuntu-it

Indice
Partecipa
FAQ
Wiki Blog
------------------
Ubuntu-it.org
Forum
Chiedi
Chat
Cerca
Planet
  • Pagina non alterabile
  • Informazioni
  • Allegati
  • Differenze per "AmministrazioneSistema/Cron"
Differenze tra le versioni 31 e 32
Versione 31 del 03/03/2019 17.38.12
Dimensione: 6717
Autore: dd3my
Commento: nuovo stile note/avvisi/suggerimenti
Versione 32 del 04/02/2020 16.06.18
Dimensione: 8753
Autore: corradoventu
Commento:
Le cancellazioni sono segnalate in questo modo. Le aggiunte sono segnalate in questo modo.
Linea 6: Linea 6:
<<Informazioni(forum="http://forum.ubuntu-it.org/viewtopic.php?f=46&t=132669&p=875872"; )>>
<<Informazioni(forum="http://forum.ubuntu-it.org/viewtopic.php?f=46&t=132669&p=875872"; rilasci="16.04 18.04 19.10")>>
Linea 13: Linea 12:
Per consultare il manuale di '''cron''' è possibile digitare il seguente comando in una finestra di [[AmministrazioneSistema/RigaDiComando|terminale]]: {{{ Per consultare il manuale di '''cron''' è possibile digitare il seguente comando nel [[AmministrazioneSistema/RigaDiComando|terminale]]: {{{
Linea 15: Linea 14:
E per la sintassi del file crontab:{{{
 man 5 crontab }}}
Linea 19: Linea 19:
Il sistema ha un suo file di '''cron''' (presente in `/etc/crontab`), ma ogni utente può creare il proprio. Per creare un file di cron è sufficiente digitare il seguente comando in una finestra di terminale: Il sistema ha un suo file di '''cron''' (presente in '''/etc/crontab'''), ma ogni utente può creare il proprio. Per creare un file di cron è sufficiente digitare il seguente comando nel terminale:
Linea 41: Linea 41:
= Esempi di sintassi dei comandi = = Sintassi dei comandi =
Linea 57: Linea 57:
Il campo del mese e quello del giorno della settimana permettono di usare un'abbreviazione, come ad esempio «jan» per gennaio (in inglese January) o «thu» per giovedì (in inglese Thursday). Quello che segue è un esempio del contenuto di un '''crontab''' di sistema: Il campo del mese e quello del giorno della settimana permettono di usare un'abbreviazione, come ad esempio «jan» per gennaio (in inglese January) o «thu» per giovedì (in inglese Thursday). Quello che segue è un esempio del contenuto di un '''crontab''' di sistema (/etc/crontab):
Linea 66: Linea 66:
L'asterisco «*» consente di non specificare alcun valore per il campo in cui viene inserito.
L'asterisco «*» consente di non specificare alcun valore per il campo in cui viene inserito.<<BR>>
Il parametro 'user' (che indica con quale utente va eseguito il comando) è presente solo nella '''crontab''' di sistema, manca nella '''crontab''' utente e in quella di root.<<BR>>
Linea 81: Linea 81:
Una volta impostata tale pianificazione, ogni lunedì e giovedì, alle ore 3:12, verrà eseguito il comando '''/percorso/comando'''.
Una volta impostata tale pianificazione, ogni lunedì e giovedì, alle ore 3:12, verrà eseguito il comando '''/percorso/comando'''.<<BR>>
Linea 85: Linea 84:
||<style="background-color:#e0cd4e;":>'''Stringa''' ||<style="background-color:#e0cd4e;":>'''Descrizione''' ||
|| «12 03 * * *» || tutte le mattine, più o meno alle 3 ||
|| « 12 03 15 * *» || tutti i 15 del mese, alla stessa ora ||
|| «12 03 31 * *» || 7 volte l'anno, alla stessa ora ||
|| «0 12 * * 0» || ogni domenica, a mezzogiorno ||
|| «2 0 * * *» || ogni giorno, più o meno a mezzanotte ||
|| «02 03 * * 1,5» || ogni lunedì e venerdì, alle 3 del mattino circa ||
||<#cccccc:>'''Stringa''' ||<#cccccc:>'''Descrizione''' ||
||<#f7f7f7>'''12 03 * * *''' || tutte le mattine, più o meno alle 3 ||
||<#f7f7f7>'''12 03 15 * *''' || tutti i 15 del mese, alla stessa ora ||
||<#f7f7f7>'''12 03 31 * *''' || 7 volte l'anno, alla stessa ora ||
||<#f7f7f7>'''0 12 * * 0''' || ogni domenica, a mezzogiorno ||
||<#f7f7f7>'''2 0 * * *''' || ogni giorno, più o meno a mezzanotte ||
||<#f7f7f7>'''02 03 * * 1,5''' || ogni lunedì e venerdì, alle 3 del mattino circa ||
Linea 93: Linea 92:
Seguono sono ulteriori esempi:
 * {{{
Seguono ulteriori esempi:
 * stampare un messaggio ogni 5 minuti, dalle 9 alle 17 da lunedì a venerdì:{{{
Linea 96: Linea 95:
}}} Stampa un messaggio ogni 5 minuti, dalle 9 alle 17 da lunedì a venerdì.
 * {{{
}}}
 * ricordare un compleanno alle 9 di mattina del 10 gennaio di ogni anno:{{{
Linea 99: Linea 98:
}}} Ricorda un compleanno alle 9 di mattina del 10 gennaio di ogni anno. }}}

== Stringhe speciali ==

Grazie ad alcune stringhe speciali è possibile in certi casi semplificare la sintassi dei comandi visti in precedenza, semplicemente sostituendo il carattere speciale ai cinque valori. Vengono qui riportati alcuni esempi:

||<#cccccc:>'''Stringa''' ||<#cccccc:>'''Eseguire comando:''' ||
||<#f7f7f7>'''@reboot''' || una volta all'avvio ||
||<#f7f7f7>'''@yearly''' || una volta all'anno (0 0 1 1 *) ||
||<#f7f7f7>'''@annually''' || ..come @yearly ||
||<#f7f7f7>'''@monthly''' || una volta al mese (0 0 1 * *) ||
||<#f7f7f7>'''@weekly''' || una volta alla settimana (0 0 * * 0) ||
||<#f7f7f7>'''@daily''' || una volta al giorno (0 0 * * *) ||
||<#f7f7f7>'''@midnight''' || ..come @daily ||
||<#f7f7f7>'''@hourly''' || una volta all'ora (0 * * * *) ||

Nota: @reboot viene eseguito dopo la partenza del daemon cron, dunque in realtà qualche secondo '''dopo''' il reboot.
Linea 103: Linea 118:
Per vedere quali '''crontab''' sono in esecuzione sul sistema è sufficiente digitare il seguente comando: Per vedere quali '''crontab''' utente sono in esecuzione sul sistema è sufficiente digitare il seguente comando:
Linea 106: Linea 121:
}}}

A seconda dei comandi che si desidera utilizzare, potrebbe essere necessario modificare la variabile d'ambiente «PATH», inserendo la seguente linea all'inizio del file di '''crontab''':
{{{
PATH=/usr/sbin:/usr/bin:/sbin:/bin
Linea 115: Linea 135:
A seconda dei comandi che si desidera utilizzare, potrebbe essere necessario modificare la variabile d'ambiente «PATH», inserendo la seguente linea all'inizio del file di '''crontab''' dell'utente: Il formato delle righe nella nella '''crontab''' di '''root''' è uguale a quello della '''crontab''' utente.
Qui sotto un esempio di una riga inserita nella '''crontab''' di '''root''' perchè deve agire su un file di sistema.
Linea 117: Linea 138:
PATH=/usr/sbin:/usr/bin:/sbin:/bin
}}}
@reboot echo "disable" > /sys/firmware/acpi/interrupts/gpe03
}}} Ad ogni reboot disabilita l'interrupt gpe03.

Anche i comandi nella crontab di sistema /etc/crontab vengono eseguiti per tutti gli utenti ma non conviene modificarla perché le modifiche potrebbero essere perse per un aggiornamento di sistema.
Linea 134: Linea 157:
I comandi eseguiti da '''cron''' vengono riportati in '''/var/log/syslog''' dunque si possono verificare con journalctl.

Problemi in questa pagina? Segnalali in questa discussione

Introduzione

Il servizio cron viene utilizzato per eseguire le azioni pianificate. Le informazioni necessarie a programmare ogni singola azione (con relativi tempi e procedure) sono indicate nel file di configurazione crontab.

Per consultare il manuale di cron è possibile digitare il seguente comando nel terminale:

 man cron 

E per la sintassi del file crontab:

 man 5 crontab 

Creare e modifica un crontab personalizzato

Il sistema ha un suo file di cron (presente in /etc/crontab), ma ogni utente può creare il proprio. Per creare un file di cron è sufficiente digitare il seguente comando nel terminale:

crontab -e

Il precedente comando apre un editor di testo contenente un documento vuoto nel quale andranno inseriti i comandi desiderati; tale file andrà salvato con il nome e nel percorso suggeriti dall'editor. Se la sintassi dei comandi non è corretta le azioni non verranno eseguite.

Una volta chiuso l'editor, il nuovo file di crontab verrà salvato in /var/spool/cron/crontabs.

I file di crontab possono essere modificati solo con il comando crontab -e.

Per vedere se il sistema ha salvato correttamente il proprio file di cron, digitare il seguente comando:

crontab -l

Verrà stampato l'elenco dei crontab registrati per l'utente corrente; in assenza di file di cron validi il risultato sarà simile al seguente:

no crontab for nomeutente

Sintassi dei comandi

Il file crontab deve rispettare una sintassi ben precisa, diversamente il sistema non accetterà le impostazioni. Quello che segue è un esempio generico:

5 3 * * * /usr/bin/apt-get update

L'esempio precedente eseguirà il comando apt-get update ogni giorno di ogni mese alle ore 03:05 (l'orario viene indicato nel formato a 24 ore).

La prima parte della voce descrive quando l'azione deve essere effettuata. Ci sono cinque campi (nell'esempio precedente, «5 3 * * *»), separati da uno spazio, ognuno dei quali accetta un numero, un asterisco o un testo appropriato. I campi specificano, in ordine (tra parentesi l'abbreviazione standard):

  • minuti, da 0 a 59 («m»);
  • ore, da 0 a 23 («h»);
  • giorno del mese, da 1 a 31 («dom»);
  • mese, da 1 a 12 («mon»);
  • giorno della settimana, da 0 (domenica) a 6 (sabato) («dow»).

Il campo del mese e quello del giorno della settimana permettono di usare un'abbreviazione, come ad esempio «jan» per gennaio (in inglese January) o «thu» per giovedì (in inglese Thursday). Quello che segue è un esempio del contenuto di un crontab di sistema (/etc/crontab):

m h dom mon dow user    command
17 *    * * *   root    run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || run-parts --report /etc/cron.daily
47 6    * * 7   root    test -x /usr/sbin/anacron || run-parts --report /etc/cron.weekly
52 6    1 * *   root    test -x /usr/sbin/anacron || run-parts --report /etc/cron.monthly

L'asterisco «*» consente di non specificare alcun valore per il campo in cui viene inserito.
Il parametro 'user' (che indica con quale utente va eseguito il comando) è presente solo nella crontab di sistema, manca nella crontab utente e in quella di root.
Quello che segue è un esempio utile a chiarire l'uso della sintassi:

12 03 * * 1,4 /percorso/script.cgi

Segue la spiegazione dei singoli parametri:

  • 12: minuti;

  • 03: ore;

  • *: giorno del mese (tutti i giorni);

  • *: mese (tutti i mesi);

  • 1,4: giorni della settimana, separati da una virgola (il lunedì e il giovedì);

  • /percorso/comando: comando da eseguire;.

Una volta impostata tale pianificazione, ogni lunedì e giovedì, alle ore 3:12, verrà eseguito il comando /percorso/comando.
Quelle che seguono sono alcune varianti della precedente pianificazione d'esempio:

Stringa

Descrizione

12 03 * * *

tutte le mattine, più o meno alle 3

12 03 15 * *

tutti i 15 del mese, alla stessa ora

12 03 31 * *

7 volte l'anno, alla stessa ora

0 12 * * 0

ogni domenica, a mezzogiorno

2 0 * * *

ogni giorno, più o meno a mezzanotte

02 03 * * 1,5

ogni lunedì e venerdì, alle 3 del mattino circa

Seguono ulteriori esempi:

  • stampare un messaggio ogni 5 minuti, dalle 9 alle 17 da lunedì a venerdì:

    */5 9-17 * * mon,tue,wed,thu,fri wall "Siamo ancora qui?"
  • ricordare un compleanno alle 9 di mattina del 10 gennaio di ogni anno:

    0 9 10 jan * echo "È il compleanno di tua madre oggi!" > ~/readme

Stringhe speciali

Grazie ad alcune stringhe speciali è possibile in certi casi semplificare la sintassi dei comandi visti in precedenza, semplicemente sostituendo il carattere speciale ai cinque valori. Vengono qui riportati alcuni esempi:

Stringa

Eseguire comando:

@reboot

una volta all'avvio

@yearly

una volta all'anno (0 0 1 1 *)

@annually

..come @yearly

@monthly

una volta al mese (0 0 1 * *)

@weekly

una volta alla settimana (0 0 * * 0)

@daily

una volta al giorno (0 0 * * *)

@midnight

..come @daily

@hourly

una volta all'ora (0 * * * *)

Nota: @reboot viene eseguito dopo la partenza del daemon cron, dunque in realtà qualche secondo dopo il reboot.

Gestione dei crontab

Per vedere quali crontab utente sono in esecuzione sul sistema è sufficiente digitare il seguente comando:

crontab -l

A seconda dei comandi che si desidera utilizzare, potrebbe essere necessario modificare la variabile d'ambiente «PATH», inserendo la seguente linea all'inizio del file di crontab:

PATH=/usr/sbin:/usr/bin:/sbin:/bin

Crontab per comandi root

Il file crontab dell'utente contiene comandi che verranno eseguiti con il livello di permessi dell'utente stesso. Se si desidera pianificare un'azione che richiede i privilegi di amministrazione è possibile creare un file di crontab per l'utente root con il seguente comando:

sudo crontab -e

Il formato delle righe nella nella crontab di root è uguale a quello della crontab utente. Qui sotto un esempio di una riga inserita nella crontab di root perchè deve agire su un file di sistema.

@reboot echo "disable" > /sys/firmware/acpi/interrupts/gpe03

Ad ogni reboot disabilita l'interrupt gpe03.

Anche i comandi nella crontab di sistema /etc/crontab vengono eseguiti per tutti gli utenti ma non conviene modificarla perché le modifiche potrebbero essere perse per un aggiornamento di sistema.

Eseguire backup periodici

Uno degli utilizzi più frequenti del comando cron riguarda l'esecuzione periodica del backup dei dati. Nel seguente esempio cron eseguirà un backup giornaliero, alle ore 19:30, della cartella /home/utente/documenti e delle sue sottocartelle, creando un file di archivio dal nome /backup_utente.tgz.

30 19 * * * tar -cvpzf /backup_utente.tgz /home/utente/documenti

Verificare le impostazioni

Per verificare il corretto funzionamento di cron è sufficiente impostare un'azione da eseguire pochi minuti dopo la modifica del file di crontab e osservare il risultato. A tale scopo è utile inserire il comando in un file che terrà traccia del successo o del fallimento dell'esecuzione, come nell'esempio seguente:

echo "Backup riuscito: $(date)" >> /tmp/mybackup.log

I comandi eseguiti da cron vengono riportati in /var/log/syslog dunque si possono verificare con journalctl.

Ulteriori risorse


CategoryAmministrazione