Il sistema GNU/Linux supporta diverse utilità per la pianificazione delle attività. L'utilità cron è la più ampiamente supportata. Consente di pianificare attività da eseguire in background a intervalli regolari. L'utilità cron utilizza una tabella (crontab) con un elenco di script o comandi da eseguire e l'ora in cui devono essere eseguiti.
Programmazione dei lavori
Gli utenti normali possono utilizzare il comando crontab per gestire i propri lavori. Questo comando può essere chiamato in quattro modi diversi:
Comando | Funzione |
---|---|
crontab -l | Elenca i lavori per l'utente corrente |
crontab -r | Rimuovi tutti i lavori per gli utenti correnti. |
crontab -e | Modifica lavori per l'utente corrente. |
crontab [nome file] | Rimuovi tutti i lavori e sostituiscili con i lavori letti da [nomefile]. Se non viene specificato alcun file, verrà utilizzato stdin. |
Come modificare e visualizzare crontab
Quando si modificano i lavori con "crontab -e “, verrà avviato un editor (vi per impostazione predefinita. a meno che la variabile d'ambiente EDITOR non sia stata impostata su qualcosa di diverso). Il file in fase di modifica avrà un lavoro per riga. Sono consentite righe vuote e i commenti iniziano la loro riga con un cancelletto (#).
# crontab -e
Quando esegui il comando "crontab -e" senza alcuna opzione, il crontab dell'utente attualmente connesso verrà modificato per impostazione predefinita. Per modificare il crontab di un altro utente, puoi usare l'opzione -u con il comando crontab. Ad esempio, per modificare il crontab dell'utente john.
# crontab -u john -e
Allo stesso modo, per visualizzare il crontab dell'utente corrente, utilizzare "crontab -l comando ".
# crontab -l
E per elencare il crontab di un utente specifico, usa il comando seguente.
# crontab -u john -l
File di configurazione Cron
Il processo in background di cron è per lo più inattivo. Si sveglia una volta al minuto e controlla /etc/crontab, /etc/cron.d e i file della tabella cron dell'utente e determina se ci sono lavori che devono essere eseguiti.
La tabella seguente riassume lo scopo dei vari file e directory utilizzati da cron. La conoscenza di questi file e directory ti aiuterà a risolvere eventuali problemi e a comprendere cron in modo più dettagliato.
File | Scopo |
---|---|
/etc/init.d/crond | Avvia il daemon cron all'avvio del sistema. |
/var/log/cron | Messaggi di sistema relativi al processo cron. Utile per la risoluzione dei problemi. |
/var/spool/cron/[nome utente] | I file crontab degli utenti vengono archiviati nella directory/var/spool/cron. |
/etc/cron.allow | Specifica gli utenti che possono creare una tabella cron. |
/etc/cron.deny | Specifica gli utenti a cui non è consentito creare una tabella cron. |
/etc/crontab | La tabella cron di sistema che contiene i comandi per eseguire gli script che si trovano nelle seguenti directory: /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly e /etc/cron.monthly. |
/etc/cron.d | Una directory che contiene tabelle cron per i lavori che devono essere eseguiti in base a una pianificazione diversa da quella oraria, giornaliera, settimanale o mensile. |
/etc/cron.hourly | Directory che contiene gli script di sistema da eseguire su base oraria. |
/etc/cron.daily | Directory che contiene gli script di sistema da eseguire quotidianamente. |
/etc/cron.weekly | Directory che contiene gli script di sistema da eseguire su base settimanale. |
/etc/cron.monthly | Directory che contiene gli script di sistema da eseguire su base mensile. |
Sintassi Crontab
I lavori dei singoli utenti sono memorizzati nella directory /var/spool/cron nei file corrispondenti ai nomi utente. Questi file appartengono sempre all'utente root. I file in /var/spool/cron non vengono modificati direttamente. Invece, per manipolarli viene utilizzato un programma chiamato crontab. La figura seguente mostra la sintassi di un lavoro cron.
Ogni riga in un file definisce un lavoro. Ci sono 6 campi in una riga. I primi 5 campi definiscono l'ora, l'ultimo campo contiene il comando da eseguire. Questo può essere qualsiasi tipo di comando o script di shell. I primi 5 campi hanno il seguente formato:
Campo | Gamma |
---|---|
Minuti | 0-59 |
Ore | 0-23 |
Giorno del mese | 1-31 |
Mese | 0-12 |
Giorno feriale | 0-7 |
Esempio di lavori cron
1. Pianifica un lavoro il 2 febbraio di ogni anno
È necessario eseguire uno script di backup una volta all'anno in una data specifica nel mese di febbraio. La sintassi è mostrata di seguito.
0 9 2 2 * /usr/local/bin/yearly_backup
2. Pianifica un lavoro ogni ora al quinto minuto, ogni giorno
Utilizzare il comando seguente per eseguire uno script ogni ora al quinto minuto, ogni giorno:
5 * * * * $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
3. Pianifica un lavoro 5 minuti dopo la mezzanotte ogni giorno
Utilizzare il comando seguente per eseguire 5 minuti dopo la mezzanotte ogni giorno:
5 0 * * * $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
4. Pianifica un lavoro a un'ora specifica il primo di ogni mese
Utilizzare il comando seguente per eseguire alle 14:15. il primo di ogni mese:
15 14 1 * * * $HOME/bin/monthly
5. Pianifica un lavoro a un'ora specifica solo nei giorni feriali (escluso sabato e domenica)
Utilizzare il comando seguente per eseguire alle 22:00. nei giorni feriali:
0 22 * * 1-5 $HOME/bin/weekday.job >> $HOME/tmp/out 2>&1
6. Pianificazione di più lavori in un unico lavoro cron
Possiamo anche programmare più lavori in un singolo lavoro cron utilizzando un punto e virgola(;) lavori separati come mostrato di seguito:
0 12 * * * /var/tmp/script01.sh; /var/tmp/script02.sh
7. Utilizzo degli intervalli per specificare gli orari di inizio
Gli intervalli possono essere specificati tramite l'uso di un trattino. Un valore compreso tra 1 e 5 indica che questo campo è valido per i numeri da 1 a 5. Se si utilizza un nome anziché un numero, non è possibile specificare un intervallo. Di seguito è mostrato un esempio di specifica degli intervalli. Il lavoro dovrebbe essere eseguito ogni ora dalle 15:00. Alle 22:00
* 3-10 * * * /var/tmp/script.sh
8. Utilizzo dei valori di passaggio per specificare gli orari di inizio
I valori dei passi possono essere utilizzati insieme agli intervalli. Per specificare un valore di passaggio, segui l'intervallo con una barra (/) e un numero. Il numero specificato è il valore del passo. Ad esempio, quanto segue specifica che ogni terzo valore (in questo caso, 2, 5, 8 e 11) deve essere abbinato:
* 0-12/3 * * * /var/tmp/script.sh
I valori di passaggio possono essere utilizzati anche con asterischi. Il valore */3 nel campo dell'ora corrisponderebbe ogni terza ora (0, 3, 6, 9, 12, 15, 18 e 21).
9. Utilizzo degli elenchi per specificare gli orari di inizio
Sono accettabili anche le liste; ogni elemento in un elenco è separato da una virgola. È comune utilizzare gli elenchi insieme agli intervalli, in questo modo:
1-15,31-45 * * * * /var/tmp/script.sh
Questo esempio corrisponde a tutti i numeri (minuti nel nostro caso) da 1 a 15 e da 31 a 45. Se utilizzi un nome invece di un numero, non puoi specificare un elenco.
10. Pianifica un lavoro alle 4:45, il 1, 10 e 22 di ogni mese
Di seguito è riportato un esempio di esecuzione di un lavoro a un'ora specifica in alcuni giorni specifici del mese.
45 4 1,10,22 * * /apps/bin/backup.sh
Macro di Crontab
Possiamo aggiungere macro nel file crontab. Ad esempio, utilizza quanto segue per riavviare "my_script" dopo ogni riavvio:
@reboot /var/tmp/my_script
Di seguito è riportato un riepilogo di alcune altre macro:
Entrata | Descrizione | Equivalente a |
---|---|---|
@reboot | Esegui una volta all'avvio | Nessuno |
@settimanale | Esegui una volta alla settimana | 0 0 * * 0 |
@giornaliero | Esegui una volta al giorno | 0 0 * * * |
@mezzanotte | (come @daily) | 0 0 * * * |
@hourly | Esegui una volta all'ora | 0 * * * * |
Gestire l'output
Uno script spesso stampa qualcosa sullo schermo, per il debug, gli aggiornamenti di stato o per registrare un errore. Tutto ciò che un lavoro stampa sullo schermo viene inviato in un'e-mail all'utente corrente, che può essere sovrascritto con la variabile MAILTO all'interno del crontab.
# crontab -l MAIL=john 0 2 * * * /apps/bin/backup.shCome pianificare i lavori con Cron in Linux
Definizione dei lavori di sistema utilizzando Cron in Linux
UNIX/Linux:come crontab convalida l'accesso in base ai file cron.allow e cron.deny
CentOS/RHEL :nozioni di base su anacron (Cos'è anacron e come configurarlo)
CentOS / RHEL :Guida per principianti a cron