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 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
Operazioni preliminari
Questa esercitazione descrive come utilizzare il comando crontab su Oracle Linux. Questa esercitazione è destinata agli utenti di Oracle Linux 8, ma è anche disponibile su altre release di Oracle Linux.
Presupposto
Oracle Linux può eseguire i programmi automaticamente come attività o job pianificati. È possibile pianificare i programmi in modo che vengano eseguiti come attività a livello di sistema modificando la configurazione cron in /etc/cron*
oppure pianificare l'esecuzione dei programmi come job all'interno di crontab dell'utente. Se non si dispone dell'accesso amministratore di sistema su un sistema o i programmi che si desidera pianificare sono specifici per il proprio account utente, l'utility crontab fornisce un buon meccanismo per eseguire programmi su una pianificazione regolare sotto le proprie credenziali utente. Il crontab consente di programmare l'esecuzione dei job con la frequenza che ogni minuto o con frequenza che ogni anno non viene eseguito; tuttavia, è necessario notare che il job cron non verrà eseguito se il sistema è inattivo durante il periodo in cui è stato pianificato l'esecuzione del job.
Questo tutorial è rivolto agli utenti di Oracle Linux 8, ma il crontab è disponibile anche per Oracle Linux 7 e il contenuto di questa esercitazione dovrebbe applicarsi anche su tale piattaforma. Si noti che 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. Questa esercitazione, tuttavia, fornisce una formazione di base più adatta all'utente medio.
Di cosa hai bisogno?
- Un sistema con Oracle Linux installato
Obiettivi
In questa esercitazione verrà descritto come:
- Elenca il contenuto di un crontab esistente
- Creare e modificare le voci crontab
- Accesso all'output crontab
- Rimuovere il crontab completo per un utente
Elenca il contenuto del file crontab
Nota: quando si utilizza l'ambiente di laboratorio gratuito, consultare Oracle Linux Lab Basics per le istruzioni di connessione e altro tipo.
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 seguente messaggio:
no crontab for oracle
Creare o modificare il crontab
-
Utilizzare il comando
crontab –e
per aprire il crontab nell'editor predefinito:crontab -e
L'editor predefinito in Oracle Linux 8 è l'editor vim.
-
Aggiungere la riga seguente alla fine del file per creare un job crontab che esegua il comando eco 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 riga crontab.
- Premere il tasto 'Esc' per uscire dalla modalità di inserimento.
- Immettere ':wq' per scrivere il file e l'editor.
Questo passaggio installa il crontab e lo rende immediatamente attivo:
crontab: installing new crontab
-
Visualizzare le voci nel crontab per visualizzare la nuova voce:
crontab -l
Ogni lavoro viene visualizzato sulla propria riga nel crontab. Il crontab contiene 5 campi separati da spazi che definiscono i diversi periodi di tempo che è possibile configurare, seguiti dal comando eseguito per il job. Il comando può equivalere a qualsiasi comando eseguibile sulla riga di comando del sistema, in modo da consentire l'esecuzione di script personalizzati o l'uso di tubi e operatori di reindirizzamento.
Controllare l'output della voce cron
Nessun MTA ( Mail Transport Agent) è installato su un sistema Oracle Linux minimo o su un'immagine di piattaforma Oracle Linux, per impostazione predefinita. Quando non viene trovato alcun MTA, il daemon cron indirizza l'output dei comandi specificati nella crontab al daemon Syslog. Su una nuova installazione di Oracle Linux 8, è possibile visualizzare l'output di crontab nel file di log all'indirizzo /var/log/cron
.
Eseguire il comando seguente per visualizzare l'output generato dalla nuova voce crontab:
sudo tail /var/log/cron
Tenere presente 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 ol8-server CROND[68564]: (oracle) CMD (echo "Hello World")
Jun 30 12:39:02 ol8-server CROND[68551]: (oracle) CMDOUT (Hello World)
Questo output mostra l'utente con il quale viene eseguito il comando, il comando che è stato eseguito e quindi mostra l'output del comando.
Se è installato un MTA, ad esempio postfix o sendmail, cron indica l'output della voce crontab sullo spool per la posta per l'utente con cui viene eseguita la voce crontab. Questa operazione viene descritta più avanti in questa esercitazione.
Opzioni sequenza temporale Crontab
I campi temporali di 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 il nome abbreviato del giorno. Si noti che 0 e 7 rappresentano 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 del giorno della settimana è possibile specificare da 1 a 5 per schedulare l'esecuzione dell'attività da lunedì a venerdì, ma non per essere eseguita il sabato o la domenica.
- Virgola (,): può essere utilizzata per specificare un elenco di valori per un campo. Ad esempio, nel campo dell'ora è possibile specificare 6.18 per pianificare l'esecuzione dell'attività alle 6 e alle 6.00.
- Barra (/): può essere utilizzata per specificare i valori dei passi. Ad esempio, è possibile specificare */15 nel campo dei minuti per pianificare l'esecuzione di un'attività ogni 15 minuti.
Il crontab consente inoltre di utilizzare un'estensione specifica per sostituire i campi temporali per i requisiti temporali generali. Importante: questa sintesi include anche la possibilità di eseguire un comando dopo il reboot:
- @reboot: eseguire una volta dopo il reboot.
- @yearly: eseguire una volta all'anno, ovvero "0 0 1 1 *".
- @annually: eseguire una volta all'anno, ovvero "0 0 1 1 *".
- @monthly: eseguire una volta al mese, ovvero "0 0 1 * *".
- @weekly: eseguire una volta alla settimana, ovvero "0 0 * * 0".
- @daily: eseguire una volta al giorno, ovvero "0 0 * * * *".
- @hourly: eseguire una volta all'ora, ovvero "0 * * * * * *".
Si noti che il crontab fornisce solo 1 minuto di granularità. Non è semplice impostare una voce crontab che funziona più frequentemente di ogni minuto. Se si sta cercando uno strumento in grado di gestire questo problema, considerare la ricerca di unità timer Systemd.
Modificare crontab per provare comandi di esecuzione diversi in sequenze temporali diverse
-
Utilizzare il comando
crontab –e
per aprire il crontab nell'editor predefinito:crontab -e
-
Aggiungere le seguenti voci al 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 del comando Crontab
Il comando crontab viene eseguito sotto le credenziali dell'utente a cui appartiene il crontab ed è eseguito con alcune variabili di ambiente predefinite impostate, tra cui:
- HOME: la directory home dell'utente su cui viene eseguito il crontab
- LOGNAME: equivalente al nome utente dell'utente che crontab funziona come
- USER: il nome utente dell'utente che crontab esegue come
- SHELL: il file binario della shell utilizzato per eseguire i comandi. Per impostazione predefinita, questa opzione è impostata su
/bin/sh
. - PATH: il percorso disponibile per l'utility crontab. Per impostazione predefinita, questa opzione è impostata su
/usr/bin:/bin
.
È possibile impostare variabili di ambiente alternative specificandole come righe 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 .bashrc
personale, è possibile modificare il crontab in modo da avere l'aspetto seguente:
SHELL=/bin/bash
* * * * * source $HOME/.bashrc;
Poiché l'esecuzione del comando per un job crontab viene eseguita all'interno di un ambiente shell, la sintassi della shell standard viene applicata e può essere utilizzata per reindirizzare l'output. Ad esempio, per reindirizzare l'output a /dev/null, disabilitando qualsiasi output di posta elettronica per il job, utilizzare i reindirizzamenti shell standard per l'output STDOUT e STDERR nel comando:
* * * * * /path/to/command > /dev/null 2>&1
In alternativa, è possibile reindirizzare l'output per aggiungere 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 provare la sintassi del comando
-
Aprire il 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
Tenere presente che i caratteri % nel comando date vengono ignorati perché i caratteri % vengono modificati in caratteri di nuova riga dall'utility crontab e tutti i dati successivi al primo % vengono inviati 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 un 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 è installato un MTA, tutto l'output di crontab viene inviato per impostazione predefinita allo spool di posta del sistema dell'utente.
Nota: le istruzioni riportate di seguito sono solo a scopo esemplificativo e non descrivono una configurazione completa per un agente di trasferimento posta (MTA). Le impostazioni predefinite per la configurazione non sono appropriate per l'installazione. Se si abilita il postfix su un sistema, leggere anche Oracle Linux: Install the Postfix Email Server per informazioni sulla configurazione corretta.
Affinché la gestione della posta crontab funzioni correttamente, è necessario installare, configurare e abilitare un MTA in modo corretto. Ai fini di questo esercizio, è sufficiente eseguire le seguenti operazioni per consentire a 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 consegna locale MTA:
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 si è configurato il crontab per reindirizzare l'output a un indirizzo di posta alternativo o per eliminare l'output per i job cron, l'output per ogni job viene fornito automaticamente 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 personalizzare questo file per vedere la posta come è consegnato:
tail -f /var/spool/mail/$USER
Per controllare 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 viene elencata nel modo seguente:
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 utilizzare il comando quit
per uscire dall'applicazione.
È possibile modificare l'indirizzo e-mail utilizzato per inviare l'output cron impostando la variabile d'ambiente MAILTO nel 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 lavoro cron nel crontab.
Rimuovere l'intero crontab
Utilizzare il comando crontab -r
per rimuovere l'intera scheda cron per un utente.
crontab -r
Questo comando rimuove tutte le voci del job cron specificate per l'utente. Se si desidera rimuovere solo una voce di job specifica, utilizzare crontab -e
per modificare il crontab e rimuovere la riga per il job che si desidera rimuovere.
Dimostrazione in video
Una demo video viene fornita all'indirizzo https://www.youtube.com/watch?v=BpPGoRYTv9I se sono necessarie ulteriori informazioni sull'utilizzo della utility crontab su Oracle Linux 8.
Utility Cron per automatizzare le attività di Oracle Linux 8
Ulteriori informazioni
man 5 crontab
man systemd.timer
- Oracle Linux: installa 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 a più contenuti di apprendimento gratuito sul canale Oracle Learning YouTube. Inoltre, visitare education.oracle.com/learning-explorer per diventare Oracle Learning Explorer.
Per la documentazione del prodotto, visitare il sito Oracle Help Center.
Use the Crontab Utility to Schedule Tasks on Oracle Linux
F49750-03
May 2022
Copyright © 2021, Oracle and/or its affiliates.