Nota:
- Questa esercitazione è disponibile in un ambiente di laboratorio gratuito fornito da Oracle.
- Utilizza valori di esempio per le credenziali, la tenancy e i compartimenti di Oracle Cloud Infrastructure. Al termine del laboratorio, sostituire questi valori con quelli specifici del tuo ambiente cloud.
Utilizzo della utility Crontab per pianificare le attività su Oracle Linux
Prima di iniziare
Questa esercitazione descrive come utilizzare il comando crontab su Oracle Linux.
Presupposto
Oracle Linux può eseguire i programmi automaticamente come task o job pianificati. È possibile pianificare programmi da eseguire come task a livello di sistema modificando la configurazione cron in /etc/cron*
oppure programmare programmi da eseguire come job all'interno di crontab utente. Se non si dispone dell'accesso amministratore di sistema a un sistema o se i programmi che si desidera pianificare sono specifici per l'account utente, l'utility crontab fornisce un buon meccanismo per eseguire i programmi a intervalli regolari con le proprie credenziali utente. Il crontab consente di pianificare i job in modo che vengano eseguiti con la frequenza di ogni minuto o con frequenza annuale. Tuttavia, si noti che il job cron non verrà eseguito se il sistema è inattivo durante il momento in cui il job è stato pianificato per l'esecuzione.
La configurazione cron è standard sulla maggior parte dei sistemi Linux ed è disponibile per i sistemi di tipo Unix dal 1975. Le soluzioni di pianificazione più complesse sono incluse in Systemd sotto forma di timer e gli utenti sono incoraggiati a esplorare i timer Systemd in modo più approfondito per risolvere requisiti specifici. Tuttavia, questa esercitazione fornisce una formazione di base più adatta all'utente medio.
Di cosa hai bisogno?
- Un sistema con Oracle Linux installato
Obiettivi
In questa esercitazione viene descritto come:
- Elencare i contenuti di un crontab esistente
- Crea e modifica inserimenti crontab
- Accesso all'output crontab
- Rimuovere il crontab completo per un utente
Elenca i contenuti del tuo file crontab
Nota: quando si utilizza l'ambiente di laboratorio gratuito, vedere Oracle Linux Lab Basics per le connessioni e altre istruzioni d'uso.
Utilizzare il comando crontab -l
per elencare i contenuti del file crontab.
crontab -l
Se non esiste alcuna voce crontab per l'utente, viene visualizzato il messaggio seguente:
no crontab for oracle
Crea o modifica crontab
-
Utilizzare il comando
crontab –e
per aprire crontab nell'editor predefinito:crontab -e
L'editor predefinito di Oracle Linux è l'editor vim.
-
Aggiungere la riga seguente alla fine del file per creare un job crontab che esegue il comando echo ogni minuto:
* * * * * echo "Hello World"
In vim:
- È possibile passare alla parte inferiore del file premendo 'Maiusc-g'.
- Premere il tasto 'i' per accedere alla modalità di inserimento.
- Inserire la linea crontab.
- Premere il tasto 'Esc' per uscire dalla modalità di inserimento.
- Immettere ':wq' per scrivere il file e l'editor.
Questo passo installa il crontab e lo rende immediatamente attivo:
crontab: installing new crontab
-
Elencare gli inserimenti nel crontab per visualizzare il nuovo inserimento:
crontab -l
Ogni lavoro viene visualizzato nella propria linea nel crontab. crontab dispone di 5 campi separati da spazi che definiscono i diversi periodi di tempo che è possibile configurare, seguiti dal comando che viene eseguito per il job. Il comando può essere equivalente a qualsiasi comando che è possibile eseguire sulla riga di comando del sistema, consentendo di eseguire i propri script o di sfruttare i tubi e gli operatori di reindirizzamento.
Controllare l'output della voce cron
Nessun agente di trasporto di posta (MTA) viene installato per impostazione predefinita su un sistema Oracle Linux o su un'immagine di piattaforma Oracle Linux. Quando non viene trovato alcun MTA, il daemon cron indirizza l'output dai comandi specificati in crontab al daemon Syslog. Una nuova installazione di Oracle Linux consente di visualizzare l'output di crontab nel file di log all'indirizzo /var/log/cron
.
Eseguire il comando seguente per visualizzare l'output generato dal nuovo inserimento crontab:
sudo tail /var/log/cron
Si noti che il task cron viene eseguito solo ogni minuto, pertanto potrebbe essere necessario attendere un minuto prima di eseguire il comando. L'output di questa voce cron dovrebbe essere simile al seguente:
Jun 30 12:39:02 ol-server CROND[68564]: (oracle) CMD (echo "Hello World")
Jun 30 12:39:02 ol-server CROND[68551]: (oracle) CMDOUT (Hello World)
Questo output mostra all'utente che il comando viene eseguito come, il comando eseguito e quindi mostra l'output del comando.
Se viene installato un MTA, ad esempio postfix o sendmail, cron indirizza l'output dell'inserimento crontab allo spool di posta per l'utente in cui viene eseguito l'inserimento crontab. Questo è discusso ulteriormente, più avanti in questo tutorial.
Opzioni sequenza temporale Crontab
I campi ora Crontab sono definiti nella sequenza seguente:
- minuto: Da 0 a 59
- ora: Da 0 a 23
- giorno: Da 1 a 31
- mese: da 1 a 12, o il nome del mese
- giorno della settimana: da 0 a 7 o nome abbreviato del giorno. Si noti che 0 e 7 rappresentano entrambe la domenica.
I caratteri speciali possono essere utilizzati in qualsiasi campo temporale:
- Asterisco (*): specifica che il comando deve essere eseguito per ogni istanza del campo
- Trattino (-): Può essere utilizzato per indicare un intervallo. Ad esempio, nel campo giorno della settimana, è possibile specificare 1-5 per pianificare l'esecuzione dell'attività dal lunedì al venerdì, ma non per l'esecuzione il sabato o la domenica.
- Virgola (,): può essere utilizzata per specificare un elenco di valori per un campo. Nel campo delle ore, ad esempio, è possibile specificare 6,18 per pianificare l'esecuzione del task alle 6 e alle 6.
- Barra in avanti (/): può essere utilizzata per specificare i valori dei passi. Ad esempio, è possibile specificare */15 nel campo dei minuti per pianificare un task da eseguire ogni 15 minuti.
La crontab consente inoltre di utilizzare un'estensione shorthand speciale per sostituire i campi temporali per i requisiti temporali generali. È importante notare che questo comando include anche un'opzione per eseguire un comando dopo il reboot:
- @reboot: eseguire una volta dopo il reboot.
- @yearly: eseguire una volta all'anno, ad esempio "0 0 1 1 *".
- @annually: eseguire una volta all'anno, ad esempio "0 0 1 1 *".
- @monthly: eseguire una volta al mese, ad esempio "0 0 1 * *".
- @weekly: eseguire una volta alla settimana, ad esempio "0 0 * * 0".
- @daily: eseguire una volta al giorno, ad esempio "0 0 * * *".
- @hourly: eseguire una volta all'ora, ad esempio "0 * * * *".
Si noti che crontab fornisce solo granularità di 1 minuto. Non è semplice impostare un inserimento crontab che avvenga più frequentemente di ogni minuto. Se si sta cercando uno strumento in grado di gestire questo problema, considerare la possibilità di cercare le unità con timer Systemd.
Modificare crontab per provare diversi comandi in esecuzione in sequenze temporali diverse
-
Utilizzare il comando
crontab –e
per aprire crontab nell'editor predefinito:crontab -e
-
Aggiungere i seguenti inserimenti a crontab:
*/15 * * * * echo "This crontab entry runs every 15 minutes" 10 * * * * echo "This crontab entry runs at 10 minutes past every hour" 30 13 * * 3 echo "This crontab entry runs at 13h30 on every Wednesday" @reboot echo "This command runs once after a reboot event"
-
Salvare il file crontab e uscire.
Sintassi dei comandi di Crontab
Il comando crontab viene eseguito sotto le credenziali dell'utente a cui crontab appartiene ed viene eseguito con un set di variabili di ambiente predefinite, tra cui:
- HOME: la directory home dell'utente che il crontab viene eseguito come
- LOGNAME: equivalente al nome utente dell'utente che crontab viene eseguito come
- UTENTE: nome utente dell'utente che crontab viene eseguito come
- SHELL: il binario della shell utilizzato per eseguire comandi. Per impostazione predefinita, questa opzione è impostata su
/bin/sh
. - PATH: percorso disponibile per la utility crontab. Per impostazione predefinita, questa opzione è impostata su
/usr/bin:/bin
.
È possibile impostare variabili di ambiente alternative specificandole come linee all'interno di crontab che non includono campi temporali, ad esempio se si preferisce utilizzare la shell bash e si desidera importare regolarmente tutte le variabili e le impostazioni con la configurazione personale .bashrc
, è possibile modificare il crontab per eseguire le operazioni riportate di seguito.
SHELL=/bin/bash
* * * * * source $HOME/.bashrc;
Poiché l'esecuzione del comando per un job crontab viene eseguita in un ambiente shell, viene applicata la sintassi della shell standard e può essere utilizzata per eseguire la pipe o il reindirizzamento dell'output. Ad esempio, per reindirizzare tutti gli output a /dev/null, disabilitando qualsiasi output inviato per il job come risultato, utilizzare i reindirizzamenti shell standard per l'output STDOUT e STDERR sul comando:
* * * * * /path/to/command > /dev/null 2>&1
In alternativa, è possibile reindirizzare l'output in aggiunta a un file che è possibile utilizzare per tenere traccia dell'output del comando per ogni esecuzione:
* * * * * /path/to/command >> $HOME/command.log
Modificare il crontab per sperimentare la sintassi dei comandi
-
Aprire crontab in un editor utilizzando il comando
crontab -e
. -
Aggiungere le voci seguenti:
*/15 * * * * echo "This 'silent' crontab entry runs every 15 minutes but output is redirected to /dev/null" > /dev/null 2>&1 * * * * * echo "The date and time is $(date +\%Y-\%m-\%d\ \%H:\%M:\%S)" >> $HOME/crontab.log
Si noti che i caratteri % nel comando date vengono sottoposti a escape perché i caratteri % vengono modificati in caratteri newline dall'utility crontab e tutti i dati dopo l'invio del primo % al comando come input standard. Per ulteriori informazioni, vedere
man 5 crontab
. -
Salvare il file e uscire.
Entro un minuto, nella directory $HOME deve essere visualizzato il file crontab.log. È possibile visualizzare il contenuto di questo file eseguendo:
tail $HOME/crontab.log
Accesso all'output crontab nello spool di posta locale
Se viene installato un MTA, tutti gli output crontab vengono inviati automaticamente allo spool di posta del sistema dell'utente.
Nota: le seguenti istruzioni sono solo a scopo di esempio e non descrivono una configurazione completa per un agente di trasferimento di posta (MTA). È possibile che le impostazioni predefinite della configurazione non siano appropriate per l'installazione. Se si abilita il postfix su un sistema, consultare anche Oracle Linux: Installare il server di posta elettronica Postfix per informazioni sulla sua configurazione corretta.
Affinché la gestione della posta crontab funzioni correttamente, è necessario installare, configurare e abilitare correttamente un MTA. Ai fini di questo esercizio, è sufficiente eseguire le seguenti operazioni per consentire all'MTA postfix di gestire la posta locale:
-
Installare il pacchetto postfix:
sudo dnf install -y postfix
-
Abilitare e avviare il servizio postfix. La configurazione predefinita abilita il postfix solo come MTA di consegna locale:
sudo systemctl enable --now postfix.service
-
Riavviare il servizio crond, in modo che inizi a utilizzare il postfix MTA per gestire la consegna della posta:
sudo systemctl restart crond.service
Se non è stato configurato crontab per reindirizzare l'output a un indirizzo di posta alternativo o per eliminare l'output per i job cron, l'output di ciascun job viene automaticamente consegnato nello spool di posta locale per l'utente. Lo spool di posta viene in genere memorizzato come singolo file di posta accessibile all'indirizzo /var/spool/mail/$USER. Se si sta semplicemente monitorando l'attività recente, è più facile coda questo file per vedere la posta come viene consegnato:
tail -f /var/spool/mail/$USER
Per esaminare l'output di ciascun job cron in un'interfaccia gestibile, installare il pacchetto mailx e utilizzare il comando mail
per visualizzare il contenuto dello spool di posta:
sudo dnf install -y mailx
mail
La posta è elencata nel seguente modo:
Mail version 12.5 7/5/10. Type ? for help.
"/var/spool/mail/oracle": 1 messages 1 new
>N 1 (Cron Daemon) Wed Aug 5 23:48 30/1436 "Cron oracle
&
Immettere il numero del messaggio di posta da visualizzare. Ad esempio, immettere 1 per visualizzare il primo messaggio nella coda:
& 1
Hello World
Utilizzare il comando header
per tornare all'elenco delle intestazioni di posta oppure il comando quit
per uscire dall'applicazione.
È possibile modificare l'indirizzo di posta elettronica utilizzato per inviare l'output cron impostando la variabile di ambiente MAILTO in crontab, ma il sistema deve essere configurato per gestire la consegna della posta esterna. Se si imposta l'ambiente MAILTO su un valore vuoto, l'output viene eliminato e non viene inviata alcuna posta per alcun job cron in crontab.
Rimuovere l'intero crontab
Utilizzare il comando crontab -r
per rimuovere l'intero crontab per un utente.
crontab -r
Questo comando rimuove tutte le voci di job cron specificate per l'utente. Se si desidera rimuovere solo un inserimento di lavoro specifico, utilizzare crontab -e
per modificare crontab e rimuovere la riga per il job che si desidera rimuovere.
Per ulteriori informazioni su queste funzionalità, vedere man 5 crontab
e man systemd.timer
.
Dimostrazione in video
Una demo video viene fornita all'indirizzo Utility Cron per l'automazione dei task di Oracle Linux se sono necessarie ulteriori informazioni sull'utilizzo della utility crontab su Oracle Linux.
Ulteriori informazioni
- Oracle Linux: installare il server di posta elettronica Postfix
- Documentazione Oracle Linux
- Oracle Learning Library
Altre risorse di apprendimento
Esplora altri laboratori su docs.oracle.com/learn o accedi ad altri contenuti per la formazione gratuita sul canale YouTube di Oracle Learning. Inoltre, visitare education.oracle.com/learning-explorer per diventare Oracle Learning Explorer.
Per la documentazione sul prodotto, visitare Oracle Help Center.
Use the Crontab Utility to Schedule Tasks on Oracle Linux
F49750-04
July 2022
Copyright © 2021, Oracle and/or its affiliates.