Wiki Ubuntu-it

Indice
Partecipa
FAQ
Wiki Blog
------------------
Ubuntu-it.org
Forum
Chiedi
Chat
Cerca
Planet
  • Pagina non alterabile
  • Informazioni
  • Allegati

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