Nota:

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?

Obiettivi

In questa esercitazione verrà descritto come:

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

  1. Utilizzare il comando crontab –e per aprire il crontab nell'editor predefinito:

    crontab -e
    

    L'editor predefinito in Oracle Linux 8 è l'editor vim.

  2. 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
    
  3. 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:

I caratteri speciali possono essere utilizzati in qualsiasi campo temporale:

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:

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

  1. Utilizzare il comando crontab –e per aprire il crontab nell'editor predefinito:

    crontab -e
    
  2. 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"
    
  3. 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:

È 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

  1. Aprire il crontab in un editor utilizzando il comando crontab -e.

  2. 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.

  3. 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:

  1. Installare il pacchetto postfix:

    sudo dnf install -y postfix
    
  2. Abilitare e avviare il servizio postfix. La configurazione predefinita abilita il postfix solo come consegna locale MTA:

    sudo systemctl enable --now postfix.service
    
  3. 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

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.