## page was renamed from CronHowTo ##docs intrepid #format wiki #language it <> <> = 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 [[AmministrazioneSistema/Terminale|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 [[AmministrazioneSistema/Terminale|terminale]] il seguente comando:{{{ crontab -e }}} 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. 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'''. }}} 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 * * * *) || {{{#!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''':{{{ 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 [[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. {{{ @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 = * [[Ubuntu:CronHowto|Documento originale]] * [[AmministrazioneSistema/BackupDelSistema/BackupConTar|Guida al backup con tar]] ---- CategoryAmministrazione