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 6 e 36 (in 30 versioni)
Versione 6 del 24/11/2005 12.40.56
Dimensione: 3536
Autore: BlackDesert
Commento: indice modifiche aggiunte
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:
[[BR]]
||<tablestyle="fixed; font-size: 0.9em; width:50%; background:#F1F1ED; margin: 0 0 1em 1em;" style="padding:0.5em;">'''Indice'''[[BR]][[TableOfContents]]||
## page was renamed from CronHowTo
##docs intrepid
#format wiki
#language it
<<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 4: Linea 8:
= Cos'è Cron? = = Introduzione =
Linea 6: Linea 10:
'''Cron''' è un demone usato per programmare azioni che verranno eseguite in un momento scelto. Ogni utente può avere il suo file per crontab, che permette di specificare le azioni da eseguire e il numero di volte che dovranno essere eseguite. C'è anche un crontab di sistema (''/etc/crontab''), che permette la programmazione di azioni sui log, l'aggiornamento periodico dei database, etc... 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'''.
Linea 8: Linea 12:
== Usare Cron ==  * 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 10: Linea 19:
Per usare cron, semplicemente aggiungi delle voci al tuo file di crontab. Una voce di crontab è una stringa che specifica quando lanciare un comando e il comando stesso da eseguire. Un esempio:
{{{
5 3 * * * /usr/bin/apt-get update
= 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:{{{
crontab -e
Linea 14: Linea 24:
La prima parte della voce descrive quando l'azione deve essere effettuata. Ci sono cinque campi, separati da uno spazio, ognuno dei quali accetta un numero, un asterisco (*), o un testo appropriato. I campi specificano, in ordine, il *minuto*, l'*ora*, il *giorno del mese*, il *mese* e il *giorno della settimana*. Il campo del mese e quello del giorno della settimana permettono di usare un'abbreviazione, come ad esempio "jan" per Gennaio (January) o "thu" per Giovedì (Thursday).
Linea 16: Linea 25:
L'esempio precedente eseguirà {{{/usr/bin/apt-get update}}} ogni giorno di ogni mese alle 03:05 (cron utilizza un tempo indicato sul sistema di 24 ore). Puoi fare in modo che '''cron''' ti annoi ogni 5 minuti durante il tuo turno di lavoro (9 di mattina - 5 di pomeriggio) con un messaggio: 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 18: Linea 27:
{{{
*/5 9-17 * * mon,tue,wed,thur,fri wall "Siamo ancora qui?"
Una volta chiuso l'editor, il nuovo file di '''crontab''' verrà salvato in `/var/spool/cron/crontabs`.

{{{#!wiki note
I file di '''crontab''' possono essere modificati solo con il comando '''crontab -e'''.
Linea 21: Linea 32:
o ricordarti un compleanno alle 9 di mattina il 10 gennaio ogni anno:
{{{
0 9 10 jan * echo "E' il compleanno di tua madre oggi!" > ~/readme
}}}
Per vedere il contenuto corrente del tuo file di crontab, esegui:
{{{

Per vedere se il sistema ha salvato correttamente il proprio file di '''cron''', digitare il seguente comando:{{{
Linea 30: Linea 37:
Per modificare il file, con un editor specificato nel tuo sistema, utilizza: 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`):
Linea 32: Linea 58:
crontab -e 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 34: Linea 64:
Quando chiuderai l'editor, il nuovo file di crontab sarà installato. Il file è mantenuto in ''/var/spool/cron/crontabs'' ma deve essere modificato solo per mezzo del comando di crontab.
Linea 36: Linea 65:
== Considerationi Supplementari == 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>>
Quello che segue è un esempio utile a chiarire l'uso della sintassi:
{{{
12 03 * * 1,4 /percorso/script.cgi
}}}
Linea 38: Linea 72:
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 ul livello più alto di permessi, imposta un file di crontab per root usando:
{{{
sudo crontab -e
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'''.<<BR>>
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?"
Linea 42: Linea 95:
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:
{{{
 * 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 * * * *) ||

{{{#!wiki note
'''@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''':{{{
Linea 47: Linea 127:
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: = 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 [[AmministrazioneSistema/PrivilegiDiAmministrazione/Sudo|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.
Linea 49: Linea 136:
@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:{{{
Linea 51: Linea 153:
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.
Linea 53: Linea 154:
I comandi eseguiti da '''cron''' vengono riportati in '''/var/log/syslog''' dunque si possono verificare con '''journalctl'''.

= Ulteriori risorse =

 * [[Ubuntu:CronHowto|Documento originale]]
 * [[AmministrazioneSistema/BackupDelSistema/BackupConTar|Guida al backup con tar]]
Linea 54: Linea 161:

Traduzione: LorenzoSfarra - Documento Originale: wiki:Ubuntu/CronHowTo
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