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 17 e 36 (in 19 versioni)
Versione 17 del 21/10/2007 11.44.51
Dimensione: 6978
Commento: sistemata la sintassi e modificare crontab
Versione 36 del 23/11/2023 02.08.35
Dimensione: 8727
Autore: jeremie2
Commento: Tabelle: rimozione vecchi colori standard
Le cancellazioni sono segnalate in questo modo. Le aggiunte sono segnalate in questo modo.
Linea 1: Linea 1:
## page was renamed from CronHowTo
##docs intrepid
Linea 3: Linea 5:
[[BR]]
||<tablestyle="float:right; font-size: 0.9em; width:35%; background:#F1F1ED; margin: 0 0 1em 1em;" style="padding:0.5em;">'''Indice'''[[BR]][[TableOfContents]]||
<<Indice(depth=1)>>
<<Informazioni(forum="http://forum.ubuntu-it.org/viewtopic.php?f=46&t=132669&p=875872"; rilasci="22.04 20.04 19.10 18.04 16.04")>>
Linea 10: Linea 12:
= Creare e modifica un crontab personalizzato =  * Per consultare il manuale di '''cron''' digitare il seguente comando nel [[AmministrazioneSistema/Terminale|terminale]]: {{{
 man cron
}}}
 * Per la sintassi del file '''crontab''' digitare:{{{
 man 5 crontab
}}}
Linea 12: 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:
{{{
= Creare e modificare 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 nel [[AmministrazioneSistema/Terminale|terminale]] il seguente comando:{{{
Linea 17: Linea 25:
Il precedente comando apre un [:EditorDiTesto: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. Il precedente comando apre un [[Ufficio/EditorDiTesto|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.
Linea 21: Linea 29:
||<tablestyle="text-align: justify; width:100%; " style="border:none;" 5%>[[Immagine(Icone/Piccole/note.png,,center)]] ||<style="padding:0.5em; border:none;">''I file di'' '''crontab''' ''possono essere modificati solo con il comando'' '''crontab -e'''. || {{{#!wiki note
I file di '''crontab''' possono essere modificati solo con il comando '''crontab -e'''.
}}}
Linea 23: Linea 33:
Per vedere se il sistema ha salvato correttamente il proprio file di '''cron''', digitare il seguente comando:
{{{
Per vedere se il sistema ha salvato correttamente il proprio file di '''cron''', digitare il seguente comando:{{{
Linea 28: Linea 37:
Verrà stampato l'elenco dei '''crontab''' registrati per l'utente corrente; in assenza di file di '''cron''' validi il risultato sarà simile al seguente:  {{{ Verrà stampato l'elenco dei '''crontab''' registrati per l'utente corrente; in assenza di file di '''cron''' validi il risultato sarà simile al seguente:{{{
Linea 33: Linea 41:
= Esempi di sintassi dei comandi = = Sintassi dei comandi =
Linea 35: Linea 43:
Il file '''crontab''' deve rispettare una sintassi ben precisa, diversamente il sistema non accetterà le impostazioni. Quello che segue è un esempio generico:
{{{
Il file '''crontab''' deve rispettare una sintassi ben precisa, diversamente il sistema non accetterà le impostazioni. Quello che segue è un esempio generico:{{{
Linea 43: Linea 50:
 * 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»).
 * 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''').
Linea 49: Linea 56:
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 51: Linea 58:
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
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
Linea 58: Linea 65:
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 70: Linea 77:
 * '''1,4''': giorni della settimana, separati da una virgola (il lunedì e il giovedì);
 * `/percorso/comando`: comando da eseguire;.
 * '''1,4''': giorni della settimana, separati da una virgola (il Lunedì e il Giovedì);
 * '''/percorso/comando''': comando da eseguire;.
Linea 73: Linea 80:
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 77: Linea 83:
||<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 ||
||<:>'''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 ||
Linea 85: Linea 91:
Seguono sono ulteriori esempi:
 * {{{
*/5 9-17 * * mon,tue,wed,thur,fri wall "Siamo ancora qui?"
}}} Stampa un messaggio ogni 5 minuti, durante il tutto giorno.
 * {{{
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:{{{
Linea 91: Linea 97:
}}} 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:

||<:>'''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 * * * *) ||

{{{#!wiki note
'''@reboot''' viene eseguito dopo la partenza del daemon cron, dunque in realtà qualche secondo '''dopo''' il reboot.
}}}
Linea 95: Linea 119:
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 98: 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 102: Linea 129:
I comandi precedenti sono memorizzati in un file di crontab e verranno eseguiti con il livello di permessi dell'utente a cui appartiene. Se vuoi lanciare un comando regolarmente che richiede un livello più alto di permessi, imposta un file di crontab per root usando:

{{{
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 [[AmministrazioneSistema/PrivilegiDiAmministrazione/Sudo|privilegi di amministrazione]] è possibile creare un file di '''crontab''' per l'utente '''root''' con il seguente comando:{{{
Linea 108: Linea 133:
A seconda dei comandi che dovrai utilizzare, potresti avere bisogno di modificare la variabile 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.
{{{
@reboot echo "disable" > /sys/firmware/acpi/interrupts/gpe03
}}} A ogni reboot disabilita l'interrupt gpe03.
Linea 110: Linea 139:
Anche i comandi nella crontab di sistema `/etc/crontab` vengono eseguiti per tutti gli utenti ma non conviene modificarla perché le modifiche potrebbero andare 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`.
Linea 111: Linea 145:
PATH=/usr/sbin:/usr/bin:/sbin:/bin 30 19 * * * tar -cvpzf /backup_utente.tgz /home/utente/Documenti
Linea 114: Linea 148:
= Crontab per eseguire backup di dati = = Verificare le impostazioni =
Linea 116: Linea 150:
Uno degli utilizzi più frequenti, ed utili, del comando cron riguardano l'esecuzione periodica del backup dei dati. In questo esempio cron eseguirà un backup giornaliero, alle ore 19:30, della cartella "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
}}}

Questo è solo un esempio delle potenzialità di questo comando. Per maggiori informazioni sul backup dei dati con '''tar''' consulta questa [:BackupDelSistema/BackupConTar:guida].

= Considerazioni finali =

E' sensato voler testare se tutto funziona come voluto. Un metodo per farlo è impostare un'azione da eseguire un paio di minuti dopo la modifica del file di crontab e vedere il risultato. Puoi anche trovare utile mettere il comando in un file che terrà traccia del successo o del fallimento dell'esecuzione:

{{{
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:{{{
Linea 132: Linea 154:
Per maggiori informazioni, utilizza '''man''' per '''cron''' e '''crontab'''. Potrebbe anche esserti utile il comando '''at''' (che è parte dell'installazione base di Ubuntu) ed '''anacron''' (che si trova nel repository Universe) che fornisce un approccio diverso per azioni programmate. I comandi eseguiti da '''cron''' vengono riportati in '''/var/log/syslog''' dunque si possono verificare con '''journalctl'''.
Linea 135: Linea 157:
 * [wiki:Ubuntu/CronHowto Documento originale]
 * [[Ubuntu:CronHowto|Documento originale]]
 * [[AmministrazioneSistema/BackupDelSistema/BackupConTar|Guida al backup con tar]]
Linea 137: Linea 161:
CategoryAmministrazione CategoryDaRevisionare CategoryAmministrazione

Guida verificata con Ubuntu: 20.04 22.04

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 digitare il seguente comando nel terminale:

     man cron
  • Per la sintassi del file crontab digitare:

     man 5 crontab

Creare e modificare 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 nel terminale il seguente comando:

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 * * * *)

@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

A 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 andare 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